我试图创建一个读取一行,即UNTIL \ n的c ++程序,并将每个单词保留在vector<string> something
;
我尝试过很多像
这样的事情vector<string> something;
char buffer[100];
while(scanf("%s",buffer) != '\n')
{
if(strcmp(buffer, ' ')
something.push_back(buffer);
}
但没有任何作用。 有些帮忙吗?
答案 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