如何在一个字符串向量中分割一行

时间:2018-05-03 19:19:46

标签: c++ arrays string vector

我试图创建一个读取一行,即UNTIL \ n的c ++程序,并将每个单词保留在vector<string> something;

我尝试过很多像

这样的事情
vector<string> something;
char buffer[100];
 while(scanf("%s",buffer) != '\n')
 {
        if(strcmp(buffer, ' ')
        something.push_back(buffer);
 }

但没有任何作用。 有些帮忙吗?

2 个答案:

答案 0 :(得分:3)

您可以使用std::getline() to get a whole line

#include <iostream>
#include <vector>
#include <string>

int main() {
    const std::string exitString = "exit";
    std::vector<std::string> lines;

    std::string inp;
    while (inp != exitString) {
        std::getline(std::cin, inp);
        if(inp != exitString)
            lines.push_back(inp);
    }

    //print received input and exit
    std::cout << "\n\nLines recorded (" << lines.size() << "):\n";
    for (auto str : lines)
        std::cout << str << "\n";

    std::cin.get();
    return 0;
}

通过几轮任意输入,程序输出存储在向量中的行:

Lines recorded (6):
Hello World!
I  a m  v e r y  s c a t t e r e d
123 321 456 654 7 8 9  9 8 7
A B C
A  B  C
A   B   C

因为你提到&#34;在一个向量中保留单词&#34; - 这是一种方式(将其添加到上面的代码中):

//separate to words
std::vector<std::string> words;
for (auto str : lines) {
    std::string word;
    for (auto c : str) {
        if(c != ' ')
            word += c;
        else {
            words.push_back(word);
            word = "";
        }
    }
    if (word != "") 
        words.push_back(word);
}

答案 1 :(得分:0)

我在这里做的是,用char读取文件char。在看到换行符时,\n打破了阅读过程并写下了最后一个单词。直到看到空格不断向名为str的字符串添加字符。看到空格后,将str推入向量并清除str以在下一个循环中重新填充。

这只是一直重复,直到它看到一个新的行字符。最后,我在屏幕上打印了矢量内容。我已经提供了我使用的示例文件binStr.txt以及下面的输出。

我希望这会对你有所帮助。

#include <string>
#include <vector>
#include <fstream>
#include <iostream>

int main()
{
    std::vector <std::string> words;
    std::string str;

    std::ifstream stackoverflow("binStr.txt");
    char c;
    while (stackoverflow.get(c))
    {
        str += c;
        if(c == '\n')
        {
            words.push_back(str);
            str.clear();
            break;
        }
        if(c == ' ')
        {
            words.push_back(str);
            str.clear();
        }
    }
    stackoverflow.close();

    for (unsigned int i = 0; i < words.size(); ++i)
        std::cout << "Word: " << words[i] << "\n";

    return 0;
}

文件内容:

test some more words until new line
hello yes
maybe stackoverflow potato

结果:

Word: test
Word: some
Word: more
Word: words
Word: until
Word: new
Word: line