如何用空格读取序列并在用户在C ++中按“enter”时停止?

时间:2018-04-01 06:11:21

标签: c++ arrays

作为标题,我是学习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”。

我知道将整数分解为字符是一项耗时的工作,

我的程序怎么办?

1 个答案:

答案 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;
}