我刚开始学习C ++。我只是玩弄它并遇到一个问题,包括逐字逐句输入字符串,每个单词用空格分隔。我的意思是,假设我有
name place animal
作为输入。我想读第一个字,对它做一些操作。然后读取第二个单词,对其进行一些操作,然后读取下一个单词,依此类推。
我尝试使用像这样的getline存储整个字符串
#include<iostream>
using namespace std;
int main()
{
string t;
getline(cin,t);
cout << t; //just to confirm the input is read correctly
}
但是,我如何对每个单词执行操作并转到下一个单词?
此外,在谷歌上搜索我在许多地方看到的,而不是使用“使用命名空间std”,人们更喜欢写“std ::” 一切。为什么?我认为他们做同样的事情。那为什么要一次又一次地写它呢?
答案 0 :(得分:49)
将该行放入字符串流中并逐字逐句提取:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
string t;
getline(cin,t);
istringstream iss(t);
string word;
while(iss >> word) {
/* do stuff with word */
}
}
当然,你可以跳过getline部分,直接从cin
逐字阅读。
在这里,您可以阅读why is using namespace std
considered bad practice.
答案 1 :(得分:3)
(这是为了其他可能参考的人的利益)
您只需使用 cin 和 char 数组即可。 cin输入由它遇到的第一个空格分隔。
#include<iostream>
using namespace std;
main()
{
char word[50];
cin>>word;
while(word){
//Do stuff with word[]
cin>>word;
}
}
答案 2 :(得分:1)
getline一次存储整行,这不是你想要的。一个简单的解决方法是使用三个变量并使用cin来获取它们。 C ++将在空格处自动解析。
#include <iostream>
using namespace std;
int main() {
string a, b, c;
cin >> a >> b >> c;
//now you have your three words
return 0;
}
我不知道你在谈论什么特别的“操作”,所以我无法帮助你,但如果它正在改变字符,请阅读字符串和索引。 C ++文档很棒。至于使用命名空间std;与std ::和其他图书馆相比,已有很多人说过。尝试在StackOverflow上启用these questions。