#include <iostream> 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 *********/ /********** End **********/ }
时间: 2023-07-18 09:44:46 浏览: 103
使用include <iostream>时一定要加using namespace std
好的,你想让我帮你实现一个函数extractNum,用于选出字符串中的数字字符,并将选出的数字字符重新组成新字符串。如果在第一个数字字符之前有负号,则保留该负号,有多个负号时只保留一个。那么我来帮你实现一下这个函数:
```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) {
int len = strlen(str);
char *p = str, *q = str;
bool flag = false; // 是否已经出现了数字字符
while (*p) {
if (*p == '-' && !flag) { // 如果没有出现数字字符,并且当前字符为负号
*q++ = '-'; // 保留负号
flag = true; // 标记已出现数字字符
}
else if (*p >= '0' && *p <= '9') { // 如果当前字符是数字字符
*q++ = *p; // 选出数字字符
flag = true; // 标记已出现数字字符
}
p++; // 指向下一个字符
}
*q = '\0'; // 添加字符串结束符
}
```
这里的实现思路是使用两个指针p和q,p指向原始字符串中的字符,q指向新字符串中的字符。同时使用一个布尔变量flag来记录是否已经出现数字字符。如果当前字符不是数字字符,则将p向后移动一个字符;如果当前字符是数字字符,则将该字符选出,并将p和q都向后移动一个字符。如果当前字符为负号,并且还没有出现数字字符,则将该负号保留,并将flag设置为true。最后,将新字符串的末尾添加一个字符串结束符"\0"。
阅读全文