在ACM模式中,常会遇到输入每行具有特定分隔符的多行
输入格式:
abc.txt
22,2,3,4,5,6,67,68,69,70,71
12,22,23,24,25,26,27,29,32
32,33,34,35,36
C方式
#include <cstdio>
#include <cstring>
int main() {
//IO重定向,用于避免重复输入,用于测试
freopen("abc.txt", "r", stdin);
//buffer
char buff[1024];
//用于访问每一行的指针
const char*p = NULL;
// 分隔符
char splitchar = ',';
// 读取每一行
while(gets(buff)) {
p = buff;
while(sscanf(p, "%d", &val) != EOF)
{
// 值处理
printf("%d ", val);
// 定位下一个分隔符
p = strchr(p, splitchar);
// 不是最后一个,跳过
if (p != NULL)
p++;
}
printf("\n");
}
}
C++方式
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <fstream>
#include <cstdio>
using namespace std;
int main() {
string line;
int val;
vector<vector<int>> arr;
//IO重定向,用于避免重复输入,用于测试
freopen("abc.txt", "r", stdin);
while (getline(cin, line)) {
stringstream ss(line);
vector<int> vec;
while(ss >> val)
{
vec.push_back(val); //值处理
ss.ignore(); //跳过分隔符
}
arr.push_back(vec);
}
for (int i = 0; i < arr.size(); ++i) {
for (int j = 0; j < arr[i].size(); ++j) {
cout << arr[i][j] << ' ';
}
cout << endl;
}
}