逐字逐句输入字符串

时间:2013-08-19 16:47:48

标签: c++

我刚开始学习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 ::” 一切。为什么?我认为他们做同样的事情。那为什么要一次又一次地写它呢?

3 个答案:

答案 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