C++中读入以“,”分隔的数据

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

方法

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

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

2011.6.25

看到有好心人给我回复,说可以使用strtok()函数,所以我就查找了关于这个函数的相关知识,学习学习~

 原型: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 <stdio.h>
#include <string.h>
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;

原文地址:https://www.cnblogs.com/growup/p/2074537.html