作为标题,我是学习C ++的初学者。
我想读几个包含空格分隔成整数的序列(s1,s2,s3 ...),并按“enter”停止读取s1读取s2。
这是测试数据:
4 9 6 6
1 2 3 4
3 3 5 6 9 15 18 15 18 30 3 3 5 6 9 15 18 15 18 30 1 9 9 25 36
我期望的结果是:
ARR [0] = {4,9,6,6}
ARR [1] = {1,2,3,4}
ARR [2] = {3,3,5,6,9,15,18,15,18,30,3,3,5,6,9,15,18,15,18,30,1 ,9,9,25,36}
我用一种耗时的方式将数据读入我的数组:
while(1){
int i=0,j=0;
int arr[100][25];
char test;
while(1){
stringstream ss;
cin.get(test);
if(test==' '){
ss<<seq;
seq.clear();
ss>>arr[i][j];
j++;
continue;
}
else if(test=='\n'){
ss<<seq;
seq.clear();
ss>>arr[i][j];
i++;
j=0;
break;
}
else{
seq=seq+test;
}
}
}
当程序读取大整数时,在线评判将显示“TLE”。
我知道将整数分解为字符是一项耗时的工作,
我的程序怎么办?
答案 0 :(得分:1)
执行此操作的一种方法是使用字符串。以下示例基于this answer,读取字符串中的每一行,并按空格分割。只有当数字被单个空格分割时,它才会起作用。拆分号存储在示例中的字符串向量中,可以使用int
转换为stoi
。
string nums;
while(getline(cin,nums)) {
istringstream iss(nums);
vector<string> tokens;
copy(istream_iterator<string>(iss),
istream_iterator<string>(),
back_inserter(tokens));
// print what is added
for(int i = 0; i < tokens.size(); i++) {
cout << tokens[i] << " ";
}
cout << endl;
}