概述
在处理输入的时候,有时需要输入一整行字符串,而字符串中包含类似空格,tab这样的特殊符号,直接用cin读入时不能得到预期效果,这里介绍一下C++中的整行字符串读入方法。
istream& getline (istream& is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);
注意:delim是结束标志符号,缺省值为'n'即换行符。
实例代码:
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char *argv[]) {
cout << "argc = " << argc << endl;
for(int i = 0; i < argc; ++i) {
cout << "argument[" << i << "] : " << argv[i] << endl;
}
string my_string;
while(getline(cin, my_string)) {
cout << my_string << endl;
}
return 0;
}
当我们把getline中的缺省值改成'r'时,my_string得到是每行输入字符串中第一个r出现之前的部分,如果第一个字符就是r,则my_string为空串。
getline(cin, my_string, 'r');
值得注意的是,如上例子,第一行读入"You need a rest!"后遇到第一个分割符号'r',此时my_string为"You need a",但是后面的"est!"并没有被忽略到,事实上,my_string会记录两个分割符号之间的所有符号包括回车,不像划分字符串的函数strtok,参数中可以有多个分割符号,所以使用getline()函数的第三个参数时需要注意。
char * strtok ( char * str, const char * delimiters );
注意,这里的参数时char*亦即字符串数组。
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char *argv[]) {
/**
cerr << "argc = " << argc << endl;
for(int i = 0; i < argc; ++i) {
cerr << "argument[" << i << "] : " << argv[i] << endl;
}
***/
string my_string;
while(getline(cin, my_string, 'n')) {
// cout << my_string << endl;
char *pch;
cout << "Splitting my_string '" << my_string << "' in tokens." << endl;
char str[128];
// c_str()返回的是一个临时指针,不能直接复制
strcpy(str, my_string.c_str());
cout << str << endl;
pch = strtok(str, " -,."); // 空格,'-',',','.'都是分隔符
while(pch != NULL) {
cout << pch << endl;
pch = strtok(NULL, " -,."); // 注意这里是NULL
}
}
return 0;
}
测试结果如下:
最后
以上就是温柔小鸽子为你收集整理的C++ 读入整行带空格的字符串,并将字符串按照特定符号划分成多个子串的全部内容,希望文章能够帮你解决C++ 读入整行带空格的字符串,并将字符串按照特定符号划分成多个子串所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复