在一串隐藏着一个或多个数值的字符中,选出字符串中的所有数字字符,并将选出的数字字符重新组成新字符串。如果在第一个数字字符之前有负号,则保留该负号,有多个负号时只保留一个。#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 len; len=strlen(str); /********** End **********/ }
时间: 2023-07-18 20:44:39 浏览: 164
以下是实现extractNum函数的代码:
```
void extractNum(char *str) {
int len = strlen(str);
char *p = str;
bool negative_flag = false; // 是否存在负号的标志位
while (*p != '\0') {
if (*p == '-') {
// 如果负号标志位为false,则保留该负号,否则忽略
if (!negative_flag) {
negative_flag = true;
} else {
*p = ' ';
}
} else if (*p >= '0' && *p <= '9') {
// 如果是数字字符,则保留
negative_flag = true;
} else {
// 如果不是数字字符,则用空格替换
*p = ' ';
}
p++;
}
// 使用stringstream将选出的数字字符重新组成新字符串
stringstream ss(str);
string result = "";
int num;
while (ss >> num) {
result += to_string(num) + " ";
}
// 如果存在负号,则在结果字符串最前面添加负号
if (negative_flag) {
result = "-" + result;
}
// 将结果字符串写回str
strcpy(str, result.c_str());
}
```
该函数的实现思路如下:
1. 用一个指针p遍历字符串,判断每个字符是否是数字字符或负号;
2. 如果是负号,则保留第一个负号,将其余的负号替换成空格;
3. 如果是数字字符,则标志位改为true;
4. 如果不是数字字符,则将该字符替换成空格;
5. 使用stringstream将选出的数字字符重新组成新字符串;
6. 如果存在负号,则在结果字符串最前面添加负号;
7. 将结果字符串写回str。
阅读全文