Я пытаюсь создать программу на C++, которая читает строку UNTIL \ n и сохраняет каждое слово в vector<string> something;
Я пробовал много чего вроде
vector<string> something;
char buffer[100];
while(scanf("%s",buffer) != '\n')
{
if (strcmp(buffer, ' ')
something.push_back(buffer);
}
но ничего не работает. Пожалуйста, помогите?
@Andrew T Пожалуйста, примите ответ, если ваша проблема была решена. Установите флажок рядом с ответом, который помог вам больше всего.





Что я здесь сделал, так это прочитал файл 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
Вы можете использовать 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);
}
OP запрашивает чтение до символа новой строки, а не всего файла. (По крайней мере, это то, что я понял и написал как ответ.) В конце концов, он получил ответ для обеих ситуаций. Если @AndrewT хочет прочитать файл из файла, он также может использовать while(fileoperator >> stringname), чтобы читать слово за словом и просто возвращать каждое из них. Это более простой способ решить эту проблему.
@ TuğberkKaanDuman Почему вы предполагаете, что он собирается читать из файла? scanf(), который он использует, по умолчанию направлен на ввод с клавиатуры / консоли, и я не вижу прямой или косвенной ссылки на файлы в его вопросе. Что касается вопроса о «линиях», я не уверен. Но я думаю, что он имел в виду именно это (учитывая неинтуитивное поведение, например, cin при чтении пробелов ...).
Вот зачем нам это: stackoverflow.com/help/mcve вопрос был непонятным.
while (getline (cin, buffer) {something.push_back (buffer);} Вы используете C++, используйте C++. Вам также необходимо включить iostream и использовать пространство имен std.