Как разбить строку в векторе строк - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь создать программу на c ++, которая читает строку UNTIL \ n и сохраняет каждое слово в vector<string> something;

Я пробовал много вещей, таких как

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

но ничего не работает. Некоторая помощь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Вы можете использовать std::getline() , чтобы получить целую строку :

#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

И так как вы упоминаете «держать слова в векторе» - вот один из способов (добавьте это к коду выше):

//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);
}
0 голосов
/ 03 мая 2018

То, что я сделал здесь, прочитал файл char за 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...