space 的 cin 问题
cin issue with space
所以我试图从 cin 中读取一些内容,然后空格将它们剪切,
例如,如果我得到
AA 3 4 5
111 222 33
来自 cin,我想将它们存储在一个字符串数组中。
到目前为止我的代码是
string temp;
int x = 0;
string array[256];
while(!cin.eof())
{
cin >> temp;
array[x] = temp;
x += 1;
}
但随后程序崩溃了。
然后我添加了 cout 来尝试找出 temp 中的内容,它显示:
AA345
那么我怎样才能将输入存储到一个用空格分隔的数组中呢?
这里有一种方法可以处理来自 cin
的输入,在条目之间使用任意数量的空格,并使用 boost 库将数据存储在向量中:
#include <iostream>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
int main() {
std::string temp;
std::vector<std::string> entries;
while(std::getline(std::cin,temp)) {
boost::split(entries, temp, boost::is_any_of(" "), boost::token_compress_on);
std::cout << "number of entries: " << entries.size() << std::endl;
for (int i = 0; i < entries.size(); ++i)
std::cout << "entry number " << i <<" is "<< entries[i] << std::endl;
}
return 0;
}
编辑
即使不使用 awesome boost 库也可以获得相同的结果,例如,通过以下方式:
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
int main() {
std::string temp;
std::vector<std::string> entries;
while(std::getline(std::cin,temp)) {
std::istringstream iss(temp);
while(!iss.eof()){
iss >> temp;
entries.push_back(temp);
}
std::cout << "number of entries: " << entries.size() << std::endl;
for (int i = 0; i < entries.size(); ++i)
std::cout<< "entry number " << i <<" is "<< entries[i] << std::endl;
entries.erase(entries.begin(),entries.end());
}
return 0;
}
例子
输入:
AA 12 6789 K7
输出:
number of entries: 4
entry number 0 is AA
entry number 1 is 12
entry number 2 is 6789
entry number 3 is K7
希望对您有所帮助。
所以我试图从 cin 中读取一些内容,然后空格将它们剪切, 例如,如果我得到
AA 3 4 5
111 222 33
来自 cin,我想将它们存储在一个字符串数组中。 到目前为止我的代码是
string temp;
int x = 0;
string array[256];
while(!cin.eof())
{
cin >> temp;
array[x] = temp;
x += 1;
}
但随后程序崩溃了。 然后我添加了 cout 来尝试找出 temp 中的内容,它显示:
AA345
那么我怎样才能将输入存储到一个用空格分隔的数组中呢?
这里有一种方法可以处理来自 cin
的输入,在条目之间使用任意数量的空格,并使用 boost 库将数据存储在向量中:
#include <iostream>
#include <string>
#include <vector>
#include <boost/algorithm/string.hpp>
int main() {
std::string temp;
std::vector<std::string> entries;
while(std::getline(std::cin,temp)) {
boost::split(entries, temp, boost::is_any_of(" "), boost::token_compress_on);
std::cout << "number of entries: " << entries.size() << std::endl;
for (int i = 0; i < entries.size(); ++i)
std::cout << "entry number " << i <<" is "<< entries[i] << std::endl;
}
return 0;
}
编辑
即使不使用 awesome boost 库也可以获得相同的结果,例如,通过以下方式:
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
int main() {
std::string temp;
std::vector<std::string> entries;
while(std::getline(std::cin,temp)) {
std::istringstream iss(temp);
while(!iss.eof()){
iss >> temp;
entries.push_back(temp);
}
std::cout << "number of entries: " << entries.size() << std::endl;
for (int i = 0; i < entries.size(); ++i)
std::cout<< "entry number " << i <<" is "<< entries[i] << std::endl;
entries.erase(entries.begin(),entries.end());
}
return 0;
}
例子
输入:
AA 12 6789 K7
输出:
number of entries: 4
entry number 0 is AA
entry number 1 is 12
entry number 2 is 6789
entry number 3 is K7
希望对您有所帮助。