任务是找到数组s
中所有包含数字的单词。这些字以" "
隔开,并且在阵列的末尾总是有.
。
我的代码没有退出while
循环,我不知道为什么:
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;
void Numbers(char s[], vector<pair<int, char>>& nums){
char *token;
int zero = 0;
token = strtok(s, " ");
for(int i = 0; i < strlen(token); i++){
if(isdigit(token[i])){
nums.emplace_back(zero, *token);
}
}
while(token != NULL){
zero ++;
token = strtok(NULL, " ");
for(int i = 0; i < strlen(token); i++){
if(isdigit(token[i])){
nums.emplace_back(zero, *token);
}
}
}
}
int main() {
vector<pair<int, char>> nums;
char s[256];
gets(s);
Numbers(s, nums);
cout << nums.size();
for (int i = 0; i < nums.size(); i ++){
cout << nums[i].first << " " << nums[i].second << endl;
}
return 0;
}
我试着运行代码与qw6wqe esd9f 0gfgkj.
输入与调试,token
的变化,所有应该工作,但它从来没有得到的循环。
尝试使用break
,但不起作用。
1条答案
按热度按时间e0bqpujr1#
你的程序有未定义的行为。当到达输入的末尾时,
token
是一个空指针,然后将其传递给strlen
。当
strtok
返回空指针时,需要停止处理。