C++ 如何读取文件中每行由不同分隔符分隔的整数值?
我有一个文本文件,其中包含整数值,每行用不同的字符分隔 因此,用户输入文件名,然后调用使用文件名的函数,并返回读取的所有整数值之和 在每一行上,都会提示用户输入分隔符 如果文件打开失败,函数C++ 如何读取文件中每行由不同分隔符分隔的整数值?,c++,fstream,C++,Fstream,我有一个文本文件,其中包含整数值,每行用不同的字符分隔 因此,用户输入文件名,然后调用使用文件名的函数,并返回读取的所有整数值之和 在每一行上,都会提示用户输入分隔符 如果文件打开失败,函数getSum()应通过错误输出流对象报告该错误,并返回-1 以下是我尝试过的: #include <iostream> #include <fstream> #include <sstream> #include <string> int getSum(st
getSum()
应通过错误输出流对象报告该错误,并返回-1
以下是我尝试过的:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
int getSum(std::string const& fileName){
std::ifstream in(fileName);
if(!in){
std::cerr << "Unable to open input file!\n";
return -1;
}
int sum = 0;
for(std::string line; std::getline(in, line); ){
std::cout << "enter separator: ";
char separator;
std::cin.get(separator);
std::istringstream iss(line);
for(std::string strVal; std::getline(iss, strVal, separator); ){
sum += std::stoi(strVal);
}
}
return sum;
}
int main(){
std::string fileName;
std::cout << "File name: ";
std::getline(std::cin, fileName);
std::cout << getSum(fileName) << '\n';
std::cout << '\n';
}
分隔符:“”
输出:
68
为什么不像猜测的那样是71
如果我把字符分隔符=''编码>并删除std::cin.get(分隔符)代码>它给了我正确的输出:71
。所以我想问题在于std::cin.get(separator)
有解决办法吗?问题是:
int getSum(std::string const& fileName){
std::ifstream in(fileName);
if(!in){
std::cerr << "Unable to open input file!\n";
return -1;
}
int sum = 0;
for(std::string line; std::getline(in, line); ){
std::cout << "enter separator: ";
char separator;
std::cin.get(separator); //every time the for-loop loops, this happens again, resetting separator
std::istringstream iss(line);
for(std::string strVal; std::getline(iss, strVal, separator); ){
sum += std::stoi(strVal);
}
}
return sum;
}
intgetsum(标准::字符串常量和文件名){
std::ifstream-in(文件名);
如果(!in){
问题是我想在每行输入一次分隔符。例如,文件包含:25;16;7 0 3
,因此第一行分隔符是分号,而第二行分隔符是单个空白。
int getSum(std::string const& fileName){
std::ifstream in(fileName);
if(!in){
std::cerr << "Unable to open input file!\n";
return -1;
}
int sum = 0;
for(std::string line; std::getline(in, line); ){
std::cout << "enter separator: ";
char separator;
std::cin.get(separator); //every time the for-loop loops, this happens again, resetting separator
std::istringstream iss(line);
for(std::string strVal; std::getline(iss, strVal, separator); ){
sum += std::stoi(strVal);
}
}
return sum;
}
int getSum(std::string const& fileName) {
std::ifstream in(fileName);
if (!in) {
std::cerr << "Unable to open input file!\n";
return -1;
}
int sum = 0;
std::cout << "enter separator: ";
char separator;
separator = std::cin.get(); //get separator BEFORE the for-loop
for (std::string line; std::getline(in, line); ) {
std::istringstream iss(line);
for (std::string strVal; std::getline(iss, strVal, separator); ) {
sum += std::stoi(strVal);
}
}
return sum;
}