给定输入文件,例如:
5,6
3,4
4,7
我想将其转换为以下输出,其中数字由制表符分隔:
5 6
3 4
4 7
我有以下代码读取输入文件并尝试写入输出文件:
std::ofstream outputFile("test.txt");
if (outputFile.is_open()) {
while(std::getline(infile, line, ',')) {
std::stringstream linestream(line);
int val1;
int val2;
linestream >> val1 >> val2;
outputFile << val1 << "\t" << val2 << "\n";
}
}
问题是我的输出文件包含:
1 -1431507824
3 5
6 6
2 6
有人可以解释为什么会这样吗?
答案 0 :(得分:1)
因为你添加&#39;,&#39;作为显式分隔字符。
以及你想要的
int main(){
std::ofstream outputFile("test.txt");
std::istringstream input;
input.str("5,6\n3,4\n4,7\n");
string line;
stringstream linestream;
while(getline(input, line)) {
std::stringstream linestream(line);
int val1;
int val2;
char comma;
linestream >> val1>> comma >> val2;
outputFile << val1 << "\t" << val2 << "\n";
}
}
输出:
5 6
3 4
4 7
答案 1 :(得分:1)
您使用逗号分隔,因此只读取第一个调用中的一个值。一种可能的解决方法是读取一行到换行符,然后显式读入两个值之间的逗号:
while(std::getline(infile, line)) {
std::stringstream linestream(line);
int val1;
int val2;
char comma;
linestream >> val1 >> comma >> val2;
outputFile << val1 << "\t" << val2 << "\n";
}
答案 2 :(得分:1)
使用
std::getline(linestream, data, ',');
你读到了流中第一个逗号的所有内容。您将丢弃此数据。
然后当你做
linestream >> val1 >> val2;
您将剩余的值读入val1
,然后val2
的提取失败,因为没有其他内容可供阅读。这会导致val2
未初始化并且不确定值。
一个简单的解决方案是简单地转换data
中的字符串(使用std::stoi
)并分配给val1
(因为这是它包含的值),然后将剩余的值读入val2
。像
std::getline(linestream, data, ',');
val1 = std::stoi(data);
linestream >> val2;
通过编辑,上述答案仅部分有效。解决方案基本相同。