Chinaunix首页 | 论坛 | 博客
  • 博客访问: 144297
  • 博文数量: 47
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 402
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-11 10:08
文章存档

2013年(47)

我的朋友

分类: C/C++

2013-03-13 17:17:45

网上看到的都是是整行读入,然后处理!

方法1:

读入到string类型的一个对象,然后替换string中的“,”为空格或者其他想要的分隔符;

然后使用修改后的string初始化一个stringstream,逐个的将数据读入到目标的对象中去。


方法2:

 原型:char *strtok(char *s, char *delim);
功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。实质上的处理是,strtok在s中查找包含在delim中的字符并用NULL(’\0′)来替换,直到找遍整个字符串。
说明:首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。strtok在s中查找包含在delim中的字符并用NULL(’\0′)来替换,直到找遍整个字符串。
返回值:从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。

注意:会改变原来的字符串!!!

例子:

#include
#include
int main(int argc,char **argv)
{
char buf1[]="aaa, ,a, ,,,bbb-c,,,ee|abc";
/* Establish string and get the first token: */
char* token = strtok( buf1, ",-|");
while( token != NULL )
    {
/* While there are tokens in "string" */
        printf( "%s ", token );
/* Get next token: */
        token = strtok( NULL, ",-|");
    }
return 0;

 

但是,这个函数不能解决我想要解决的问题:因为我想要分割是一系列的数据(比如30 、2.5等),这样子分割后,得到的还是字符串。

C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。以下列举了各函数的方法及其说明。

atof():将字符串转换为双精度浮点型值。

atoi():将字符串转换为整型值。

atol():将字符串转换为长整型值。

strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。

strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。

strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。

注意:缺点就是,如果转换不成功,返回0(这与值如果是0的结果一样)

还有介绍到一种方法:使用sscanf函数(与之对应,sprintf函数)。

例子:

  char    str[] = "15.455";
    int     i;
    float     fp;
    sscanf( str, "%d", &i );         // 将字符串转换成整数   i = 15
    sscanf( str, "%f", &fp );      // 将字符串转换成浮点数 fp = 15.455000
    //打印
    printf( "Integer: = %d ",  i+1 );
    printf( "Real: = %f ",  fp+1 ); 
    return 0;

阅读(1027) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~