- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在解析一个包含字符串和数值的文件。我想逐个字段处理文件,每个字段由空格或行尾字符分隔。ifstream::getline() 操作仅允许单个定界字符。因此,我目前所做的是以字符 ' ' 作为分隔符的 getline,然后如果遇到 '\n' 则手动返回到流中的先前位置:
ifstream ifs ( filename , ifstream::in );
streampos pos;
while (ifs.good())
{
char curField[255];
pos = ifs.tellg();
ifs.getline(curField, 255, ' ');
string s(curField);
if (s.find("\n")!=string::npos)
{
ifs.seekg(pos);
ifs.getline(curField, 255, '\n');
s = string(curField);
}
// process the field contained in the string s...
}
但是,“seekg”似乎将流定位到一个字符太晚了(因此我错过了每个换行符之前每个字段的第一个字符)。我知道还有其他方法可以通过逐行扫描等方式对此类解析器进行编码,但我真的很想了解为什么这段特殊的代码会失败...
非常感谢!
最佳答案
正如 Loadmaster 所说,可能有字符丢失,或者这可能只是一个差一个错误。
但这只是必须要说的......你可以替换它:
ifstream ifs ( filename , ifstream::in );
streampos pos;
while (ifs.good())
{
char curField[255];
pos = ifs.tellg();
ifs.getline(curField, 255, ' ');
string s(curField);
if (s.find("\n")!=string::npos)
{
ifs.seekg(pos);
ifs.getline(curField, 255, '\n');
s = string(curField);
}
// process the field contained in the string s...
}
有了这个:
ifstream ifs ( filename , ifstream::in );
streampos pos;
string s;
while (ifs.good())
{
ifs >> s;
// process the field contained in the string s...
}
获得你想要的行为。
关于c++ - 解析 sstream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3868873/
我正在尝试编译一个包含 C 的 graphics.h 头文件的程序。我添加了 graphics.h 和 winbgim.h 包含文件夹中的头文件以及 libbgi.a 到 lib 文件夹中。 为了测试
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
这个问题在这里已经有了答案: How to clear stringstream? [duplicate] (1 个回答) 关闭 8 年前。 我正在使用 sstream 来解析字符串。该字符串包含由
我正在解析一个包含字符串和数值的文件。我想逐个字段处理文件,每个字段由空格或行尾字符分隔。ifstream::getline() 操作仅允许单个定界字符。因此,我目前所做的是以字符 ' ' 作为分隔符
我需要打开这种格式的文件 Dat Nguyen 77.7 88.8 99.9 11.1 22.2 Pat Nguyen 2 3 4 5 6 我需要将一行的名字分配给结构的成员数组,将行的姓氏分配给结构
我正在尝试读取每行包含不同数量变量的文本文件,并使用 sstream 将正确的值设置为 vector 。 /*Example file "f 1 2 3" "f 4 5 6 7" */ ifst
因此,我的代码应该打乱句子中的单词而不改变它们在输入中出现的顺序。代码工作正常,但在输出的末尾有一个空格导致显示错误。 #include #include #include using name
cout > test; stringstream ss(test); ss >> x; while(ss.fail()) { ss.str(""); cin.clear(); cin.ignore(
这是一段代码: #include #include using namespace std; int main() { stringstream ss; string st = "2,3,
我试图通过 stringstream 将 double 变成字符串,但它不起作用。 std::string MatlabPlotter::getTimeVector( unsigned int xve
到目前为止我做了什么: 平台:Windows 7(64 位) 在 this method 之后安装了 GCC 从 link 下载 Armadillo (armadillo-6.400.3.tar.gz
这个问题显然是示例代码。很多时候,当显示std::stringstream我认为如果我需要显式添加 #include 的示例. 最佳答案 header 可能包含也可能不包含 header 。最终
我有一个 .txt 文件,里面有这样的文本(这只是一个片段): ... [332, 605]-[332, 592], srednica: 13 [324, 593]-[332, 605], sredn
在命令行中输入: 1 2 3 它存储在“行”中,我的 vector 只填充了 1 我做错了什么?这是代码 string line; string buffer; int a,b,bas
我不明白为什么 XCode 在使用时会遇到链接问题 string create_base_uri(string host, int port, string dbname){ st
在 c++ STL 库的上下文中,string::+= 或 sstream::<< 哪个性能更好,或者它取决于其他东西? 编辑:这取决于我们附加的数据大小吗? 最佳答案 它依赖于很多各种各样的参数,主
我在使用 gcc5.4.0 对大型项目运行 make 时遇到了这个错误。 /usr/include/c++/5/sstream:300:14: error: '__xfer_bufptrs' rede
我们想使用 sstream 将字符串转换为 int。 但我们不知道我们的字符串是否有整数,例如它可以是 "hello 200" 而我们想要 200 ,或者它可以是“你好” 并且没有解决方案! 当字符串
就像我有一个 stringstream 变量包含 "abc gg rrr ff" 当我在那个 stringstream 变量上使用 >> 时,它给了我 "abc"。如何获得剩余的字符串:"gg rrr
我正在尝试使用头文件sstream.h 下面是我的代码段 #include #include #include int main () { string mystr; float pr
我是一名优秀的程序员,十分优秀!