#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 *********/ char s1[1024]; char *a=s1; while(*str!='\0'){ if(*str<='9'&&*str>='0'){ *a=*str; a++; str++; } } *a='\0'; str=&s1; /********** End **********/ }这段代码运行超时,请指出其错误并改正
时间: 2023-07-06 08:36:12 浏览: 120
这段代码的错误在于函数extractNum中的指针str被赋值为s1的地址,而s1是一个局部变量,函数结束后s1的内存空间会被释放,指针str指向的地址也不再有效。因此,需要将选出的数字写回原字符串,可以直接在原字符串上进行操作,不需要额外定义一个字符数组。
下面是修改后的代码:
```c++
#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 *********/
char *p = str; // 定义指针p指向原字符串
while(*str != '\0'){
if(*str >= '0' && *str <= '9'){
*p = *str; // 将数字写回原字符串
p++; // 指针p向后移动
}
str++; // 指针str向后移动
}
*p = '\0'; // 将原字符串中非数字部分的字符设为'\0'
/********** End **********/
}
```
阅读全文