gpt4 book ai didi

c++ - 如何读取带空格的序列并在用户按 C++ 中的 "enter"时停止?

转载 作者:行者123 更新时间:2023-11-30 05:02:59 25 4
gpt4 key购买 nike

如题,我是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;
}
}
}

当程序读取大整数时,Online Judge 会显示“TLE”。

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

我可以用我的程序做什么?

最佳答案

执行此操作的一种方法是使用字符串。以下示例基于 this answer , 读取字符串中的每一行,并按空格拆分。只有当数字被单个空格分隔时,它才会起作用。拆分后的数字存储在示例中的字符串 vector 中,可以使用 stoi 将其转换为 int

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

关于c++ - 如何读取带空格的序列并在用户按 C++ 中的 "enter"时停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49595299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com