#include <iostream> #include<cstring> using namespace std; void extractNum(char* str); int main() { char s[1024]; cin.getline(s, 1024); // 输入一行字符 extractNum(s); // 调用extractNum函数,选出数字 cout << s << endl; // 输出选出的数字 return 0; } // 函数extractNum:选出str指向的字符串中的数字,并写回str // 参数:str-指向字符串 void extractNum( char* str) { // 请在此添加代码,实现函数extractNum /********** Begin *********/ int i = 0; int l = strlen(str); while ('0' > str[i] or str[i] > '9') { if (str[i] = '-' and ('0' <= str[i + 1] or str[i + 1] <= '9')) break; if ('0' <= str[i] or str[i] <= '9') break; ++i; } --i; int t = 0; for (t; t < i; ++t) { str[t] = '\0'; } for (i+1;i<l; ++i) { if ('0' > str[i] or str[i] > '9') { str[i] = '\0'; } } /********** End **********/ }
时间: 2024-03-06 21:47:18 浏览: 43
使用include <iostream>时一定要加using namespace std
这段代码实现了一个从字符串中提取数字的函数`extractNum`。但是代码中有一些问题,需要修改。
首先,循环条件中的比较符号应该是 `<` 和 `>`,而不是 `<=` 和 `>=`。因为我们要找的是数字字符,而不是非数字字符。
其次,对于负数的情况,应该判断当前字符是否为 `-`,以及下一个字符是否为数字字符。如果是,则认为当前字符是负号,否则认为当前字符是非数字字符。
最后,在将选出的数字写回字符串时,应该将非数字字符替换成空字符 `'\0'`,而不是直接赋值为 0。
下面是修改后的代码:
```
// 函数extractNum:选出str指向的字符串中的数字,并写回str
// 参数:str-指向字符串
void extractNum(char* str) {
int i = 0;
int l = strlen(str);
while (i < l && (str[i] < '0' || str[i] > '9')) {
if (str[i] == '-' && i + 1 < l && str[i + 1] >= '0' && str[i + 1] <= '9') {
break;
}
++i;
}
--i;
int t = 0;
for (t; t < i; ++t) {
str[t] = '\0';
}
for (i + 1; i < l; ++i) {
if (str[i] < '0' || str[i] > '9') {
str[i] = '\0';
}
}
}
```
希望能对你有所帮助!
阅读全文