如何解决在C ++中采用输入行并将行中的单词添加到向量的最佳方法是什么?
基本上我想输入一个包含多个单词(未指定长度)的输入行,逐个单词,并将每个单词添加到向量中。 我可以使用getline并编写一个将其拆分的函数,但是想要一种更简洁的方法来读取每个单词,并继续将其添加到向量中,直到按Enter键为止。这样直到输入键被按下。谢谢!
vector<string> inp;
while(????)
{
string str;
cin>>str;
inp.push_back(str);
}
我在不使用库的情况下寻找东西,只是在按Enter键时停止输入的某种方式,上面代码中while循环中的某些条件,使得遇到Enter键时,它会爆发并停止接受输入。像这样:
while(1)
{
string str;
cin>>str;
// if( character entered =='\0')
//break;
inp.push_back(str);
}
任何帮助将不胜感激。
解决方法
什么是最好的是不可能回答的;这取决于您如何衡量善良程度,很大程度上取决于口味和个人喜好。
例如,有些人喜欢编写显式循环,而另一些人则尽可能避免它们。
不使用显式循环的一种方法是使用std::copy
和std::istringstream
。
std::vector<std::string> words;
std::string line;
if (std::getline(std::cin,line))
{
std::istringstream is(line);
std::copy(std::istream_iterator<std::string>(is),std::istream_iterator<std::string>(),std::back_inserter(words));
}
,
将字符串中的每个单词拆分并将其存储为向量的一种好方法是借助std::istringstream
(来自sstream
库):
#include <iostream>
#include <vector>
#include <sstream>
int main(void) {
std::string input;
std::string temp;
std::vector<std::string> words;
std::getline(std::cin,input);
// Using input string stream here
std::istringstream iss(input);
// Pushing each word sep. by space into the vector
while (iss >> temp)
words.push_back(temp);
for(const auto& i : words)
std::cout << i << std::endl;
return 0;
}
作为示例测试用例,您可以看到:
$ g++ -o main main.cpp && ./main
Hello world,how are you?
Hello
world,how
are
you?
,
下面的代码与@Rohan Bari的答案几乎相同,但是我要发布,因为在分割字符串方面存在差异。
#include <iostream>
#include <iterator>
#include <sstream>
#include <vector>
#include <string>
int main(void)
{
std::string input;
std::getline(std::cin,input);
std::stringstream ss(input);
auto words = std::vector<std::string>(std::istream_iterator<std::string>(ss),{}); // difference
for (const std::string& s : words)
std::cout << s << std::endl;
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。