#include <iostream> using namespace std; #include <cstring> 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 a; a=strlen(str); int b=0; for(int j=0 ; j<a; j++) { if (str[j]>='0' and str[j]<='9') { b=b+1; } } int d[b]; for(int j=0 ; j<a; j++) { if (str[j]>='0' and str[j]<='9') { for(int i=0 ; i<10; i++) { d[i]=str[j]; } } } d[b]='\0';这段代码怎么修改
时间: 2024-03-17 16:47:19 浏览: 45
这段代码存在一些问题,需要进行修改才能正确实现选出字符串中的数字。
首先,需要根据数字的个数动态分配数组空间,而不是固定分配10个空间。可以先遍历一遍字符串,计算数字的个数,然后动态分配数组空间。
其次,在选出数字的过程中,需要将数字存储到数组中,而不是每次都存储到数组的同一个位置。可以使用一个变量记录当前数字在数组中的位置,每次找到一个数字就将其存储到数组中,并将变量加1。
最后,在选出数字后,需要将数字组成的字符串写回到原字符串中。可以使用一个指针指向原字符串中数字开始的位置,将数字依次写入指针所指向的位置。
下面是修改后的代码:
```
void extractNum(char * str) {
int len = strlen(str);
int count = 0;
for (int i = 0; i < len; i++) {
if (isdigit(str[i])) {
count++;
}
}
char * nums = new char[count + 1];
int j = 0;
for (int i = 0; i < len; i++) {
if (isdigit(str[i])) {
nums[j++] = str[i];
}
}
nums[count] = '\0';
char * p = str;
int k = 0;
while (*p != '\0') {
if (isdigit(*p)) {
*p = nums[k++];
}
p++;
}
delete[] nums;
}
```
阅读全文