cin 遇空格停止识别,虽然输入很长一串字符,但是cin在第一个遇到第一个空格就停止输入,如果你打算输入的字符串中带1个或多个空格,则采用getline把停止识别的符号设置为‘\n’(即换行符),就能正确输入输出了。
std::string myWords;
std::getline(std::cin, myWords, '\n');
std::cout << myWords << std::endl;
只要输入第一个字符不是回车,最后一个字符是回车,这之间的内容都会被读取到line中,这些内容就可以是包含空格的字符串了。
C++ 拆分字符串为单词的五种方法,其中最方便的一种如下
istringstream 作用是从string对象中读取字符。遇到空格时停滞,下一次输出从空格后开始。注意, istringstream 这个类包含在库 < sstream > 中,所以头文件必须包含这个库。
#include
#include
#include
#include // istringstream
using namespace std;
int main()
{
string str { "dog cat cat dog" };
istringstream input( str );
vector<string> vec;
// ---------------------------------------------
string temp;
while ( input >> temp )
vec.push_back( temp );
// ---------------------------------------------
for ( string word : vec )
cout << word << " ";
cout << endl;
return 0;
}
还有一个C++分割带逗号的字符串的例子(逗号替换为空格,然后用上面的方法解决)
#include
#include
#include
using namespace std;
int main(){
string s = "ab,cd,e,fg,h";
int n = s.size();
for (int i = 0; i < n; ++i){
if (s[i] == ','){
s[i] = ' ';
}
}
istringstream out(s);
string str;
while (out >> str){
cout << str <<' ';
}
cout << endl;
}
示例:输入"11:00:00 03:00:00 02:00:00",求分别输出02:00:00、03:00:00、11:00:00
#include
#include
#include
#include
#include
using namespace std;
//把时间如02:00:00转成秒输出的函数
int calcul(string s) {
int hh=stoi(s.substr(0,2));
int mm=stoi(s.substr(3,5));
int ss=stoi(s.substr(6,s.length()));
return hh*60*60+mm*60+ss; }
01:00:00 17:00:00 09:00:00
//11:00:00 03:00:00 02:00:00
int main(){
string s;
getline(cin, s, '\n');
//cin>>s; //要注意cin输入string时遇到空格会停止识别
//istringstream 作用是从string对象中读取字符。
istringstream input(s);
vector<string> vec;
string temp;
while (input >> temp){
vec.push_back(temp);
}
sort(vec.begin(),vec.end());
cout<<vec.size()<<endl;
for(int i=0;i<vec.size();i++){
cout<<vec[i]<<endl;
}
return 0;
}
//定义一个链表类
class ListNode {
public:
int val; //节点值
ListNode* next; //下一个节点
ListNode(int n) :val(n), next(nullptr) {} //构造函数
ListNode(int n, ListNode* next) :val(n), next(next) {}
};
//构造链表,先假设所有节点的值按顺序存放于一个vector容器里,并且节点值顺序即链表节点顺序
ListNode* getListNodemy(vector<int> &str) {
ListNode* dumyHead = new ListNode(-1);
ListNode* ptr = dumyHead;
int nums = str.size();
int i = 0;
while (i<nums) {
dumyHead->next =new ListNode(str[i]);
dumyHead = dumyHead->next;
i++;
}
return ptr->next;
}
//按顺序输入节点值,为了实现一次输入所有节点值,这里采用输入字符串的形式来获取节点值
vector<int> getVector(string input) {
vector<int> ans;
stringstream ss;
ss.str(input);
string item;
char delim = ',';
while (getline(ss, item, delim)) {
ans.push_back(stoi(item));
}
cout << "节点输入完成" << endl;
return ans;
}