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

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

方法

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

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

2011.6.25

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

原型:char strtok(char s, char delim);

功能:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。实质上的处理是,strtok在s中查找包含在delim中的字符并用NULL(’′)来替换,直到找遍整个字符串。

说明:首次调用时,s指向要分解的字符串,之后
再次调用要把s设成NULL*。strtok在s中查找包含在delim中的字符并用NULL(’′)来替换,直到找遍整个字符串。

返回值:从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";

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

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

C++中读入以“,”分隔的数据 sscanf( str, "%d", &i ); // 将字符串转换成整数 i = 15

C++中读入以“,”分隔的数据 sscanf( str, "%f", &fp ); // 将字符串转换成浮点数 fp = 15.455000

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

C++中读入以“,”分隔的数据 printf( "Integer: = %d ", i+1 );

C++中读入以“,”分隔的数据 printf( "Real: = %f ", fp+1 );

C++中读入以“,”分隔的数据 return 0;
原文链接: https://www.cnblogs.com/growup/archive/2011/06/07/2074537.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/26820

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午4:26
下一篇 2023年2月8日 上午4:27

相关推荐