C++ 关于字符串的特殊读入和分割问题 *非常重要,基本囊括string相关的输入输出和类型转换问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++ 关于字符串的特殊读入和分割问题 *非常重要,基本囊括string相关的输入输出和类型转换问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1971字,纯文字阅读大概需要3分钟。
内容图文
后续在做题时的时候遇到了一个从文件里去读取一串逗号分隔的double数字,并排序的问题;
还是挺操蛋的一道题,用直接读入在分割的方法贼麻烦,所以还是要寻求简单的的库函数和Cpp11特性来进行解决;
查阅相关blog,简单聊一下相关的问题;
其实最主要的有两个问题:
1.如何读入?能不能一次分割得到string;
2.如果将存放小数的string转换成double;
针对于第一个问题,找到了两种方法:
其一:利用getline的重载形式,这是自己第一次见;
以前getline(cin,s),只是简单的读入一行,但是其还有另一种形式getline(cin,s,char),其中char就是读入的终止符,如果不写默认情况下就是换行符;
所以可以直接利用这个在对文件读入的时候直接做文章;
while (getline(fin,s,‘,‘)){ dl.push_back(stod(s)); }
这段代码有两个要点:
1.getline套在while循环里直接进行读入文件尾部判定;
2.对读入的文件利用‘,’进行分割;
其二:利用古老的C函数,stroke()进行处理;
这种方法极其操蛋,不到万不得已我觉得还是别用的好,涉及很多自己以前c语言没怎么用过的东西;
while (getline(fin,s)){ char* c = (char*)malloc((s.size()) * sizeof(char)); strcpy(c, s.c_str()); cout << s << endl; cout << c << endl; char *pc = strtok(c, ","); while (pc != NULL) { string ss = pc; dl.push_back(stod(ss)); pc = strtok(NULL, ","); } }
strtok接受两个参数,第一个是数组指针char* c,第二个是一个char* de,传递需要分割的中间符号;
在传参执行成功后,传回第一个分割字符串的首地址;
后续反复调用strtok(NULL,char* de),则会一直返回指向后续分割字符串的指针,可以循环直到返回指针为空,此时分割完毕;
重要补充:
在之前刷题中,往往能见到按照空格进行分割的题目,但是往往自己都是按照字符串遍历进行截取输出,这样其实大可不必;
利用stringstream即可;
stringstream在iostream头文件中,可以利用字符串进行流的输入输出模拟,并且输出的时候可以按照空格进行割裂,割裂成好几个字符串;
while (getline(fin,s)){ stringstream ss(s); string s1; while (ss >> s1) { dl.push_back(stod(s1)); //cout << s1<<endl; } }
初始化和fstream类似,直接初始化,模拟输出即可。由于stringstream模仿的是流,所以向string输入字符也要类似于cin>>s;
针对于第二个问题,也是老生常谈的问题:
又涉及到string和int、double、char* 之间的转换问题;
针对于string转int、double:
这是一个牛皮的转换,第一次见。。。
string s; cin >> s; stringstream ss(s);
double d; ss >> d;
本质上和之前的stringstream模拟流输入一毛一样,当定义double类型的时候,直接可以利用流输入,使得系统自己识别出来这是个double数字,这个同理;
或者直接直接利用string库函数:
stod(string); stoi(string);
直接可以将string转换为int和double;
针对于int和double转string;
直接利用to_string()函数即可;
s = to_string(d);
其中d可以为int或者double;
针对于string,char*,char[]:
string转char[],将string.c_str(),转为char*,利用strcpy进行赋值,但是char*要事先用malloc开空间;
char*和char[]对string进行赋值,直接两者等于号赋值即可;
原文:https://www.cnblogs.com/songlinxuan/p/12370059.html
内容总结
以上是互联网集市为您收集整理的C++ 关于字符串的特殊读入和分割问题 *非常重要,基本囊括string相关的输入输出和类型转换问题全部内容,希望文章能够帮你解决C++ 关于字符串的特殊读入和分割问题 *非常重要,基本囊括string相关的输入输出和类型转换问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。