C++中如何将getline读取的含空格数据分割为不同变量?
实现方法
有几种常用方式可以将该行的两个数值分割到不同变量中:
方法一:直接从文件流读取(最简便)
文件中的两个数值以空格分隔,C++输入流默认会以空白字符(空格、换行等)作为分隔符,因此可以直接跳过getline,从文件流中读取两个整数:
#include <iostream> #include <fstream> using namespace std; int main() { ifstream billFile; billFile.open("bill.in"); if (billFile.is_open()) { int num1, num2; // 自动跳过空格,读取两个整数 billFile >> num1 >> num2; cout << "第一个数值:" << num1 << endl; cout << "第二个数值:" << num2 << endl; } billFile.close(); // 记得关闭文件 return 0; }
方法二:用stringstream处理已读取的整行字符串
如果已经通过getline获取了整行内容line1,可以借助stringstream拆分字符串:
#include <iostream> #include <fstream> #include <sstream> #include <string> using namespace std; int main() { ifstream billFile; billFile.open("bill.in"); if (billFile.is_open()) { string line1; getline(billFile, line1); int num1, num2; stringstream ss(line1); // 从stringstream中读取两个整数 ss >> num1 >> num2; cout << "第一个数值:" << num1 << endl; cout << "第二个数值:" << num2 << endl; } billFile.close(); return 0; }
方法三:C风格sscanf解析(兼容C写法)
若习惯C风格字符串处理,也可以用sscanf解析:
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { ifstream billFile; billFile.open("bill.in"); if (billFile.is_open()) { string line1; getline(billFile, line1); int num1, num2; // 按格式解析字符串 sscanf(line1.c_str(), "%d %d", &num1, &num2); cout << "第一个数值:" << num1 << endl; cout << "第二个数值:" << num2 << endl; } billFile.close(); return 0; }
内容的提问来源于stack exchange,提问作者kerolos aziz
相关产品推荐
相关产品推荐

