如何使用getline()终止
How to terminate using getline()
我正在尝试将一些整数存储在文件中,并使用","作为分隔符进行存储。现在,当我读取文件时,我使用getline()读取该行,并使用tokenizer来分隔文件。但是,我不能终止该行,我需要getline中的一些bool条件才能终止。
while(getline(read,line)) {
std::cout<<line<<std::endl;
std::istringstream tokenizer(line);
std::string token;
int value;
while(????CONDN???) {
getline(tokenizer,token,',');
std::istringstream int_value(token);
int_value>>value;
std::cout<<value<<std::endl;
}
}
请提供建议。
在您的情况下,以与在外循环中相同的方式使用getline
就足够了:
while(getline(tokenizer, token, ','))
虽然我很可能会做这样的事情:
while(std::getline(read,line)) { // read line by line
std::replace(line.begin(), line.end(), ',', ' ' ); // get rid of commas
std::istringstream tokenizer(line);
int number;
while(tokenizer >> number) // read the ints
std::cout<<number<<std::endl;
}
还有另外两种选择-使用Boost。
字符串算法:
#include <boost/algorithm/string.hpp>
...
std::vector<std::string> strings;
boost::split(strings, "1,3,4,5,6,2", boost::is_any_of(","));
或标记化器:
#include <boost/tokenizer.hpp>
typedef boost::char_separator<char> separator_t;
typedef boost::tokenizer<separator_t> tokenizer_t;
...
tokenizer_t tokens(line, sep);
for(tokenizer_t::iterator it = tokens.begin(); it != tokens.end(); ++it)
std::cout << *it << std::endl;
如果您希望遇到非int
、非分隔符字符,例如1 3 2 XXXX 4
。那你就得决定在这种情况下该怎么办了。tokenizer >> number
将停止在不是int
的某个位置,并且将设置istringstream
错误标志。boost::lexical_cast
也是你的朋友:
#include <boost/lexical_cast.hpp>
...
try
{
int x = boost::lexical_cast<int>( "1a23" );
}
catch(const boost::bad_lexical_cast &)
{
std::cout << "Error: input string was not valid" << std::endl;
}
最后,在C++11中,您有stoi/stol/stoll函数:
#include <iostream>
#include <string>
int main()
{
std::string test = "1234";
std::cout << std::stoi(str) << std::endl;
}
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 我收到以下错误:抛出'std::bad_alloc'实例后终止调用
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 当用户键入分隔符时,停止getline()输入
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- getline() 的原型/库是什么;
- llvm构建器向基本块添加终止符
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 如何使用隔离>终止执行来停止所有线程
- 如何在 c++ 中使用 ',' 作为 getline 分隔符
- 错误:调用'getline'没有匹配函数
- 如何在 c++ 中使用 getline 从文件中读取字符串?
- 用于将C++代码转换为 Web 程序集的脚本未终止
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- 终止 QProcess 不会终止子进程
- 将 getline() 与文件一起使用
- 我有三个 getline,但是一旦编译,输入就太多了
- 如何使用getline()终止