任务描述
本关任务:在一串隐藏着一个或多个数值的字符中,选出字符串中的所有数字字符,并将选出的数字字符重新组成新字符串。如果在第一个数字字符之前有负号,则保留该负号,有多个负号时只保留一个。
例如:输入的字符串为“a-1-2-4sd5 s6”,抽取数字后得到的新字符串为“-12456”。
编程要求
选出字符串中的所有数字字符并组成新的字符串输出。要求如果在第一个数字字符之前有负号,则保留该负号,有多个负号时也只保留一个。
测试说明
测试输入:1 s23df53dcas12sd-121sd
预期输出:1235312121
测试输入:a-1-2-3sd45 j67sd
预期输出:-1234567
开始你的任务吧,祝你成功!
#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 *********/
char *p=str;//str代表原串,p代表数字串
int f=1;//标志位
while(*str!='\0')
{
if(*str=='-'&&f){
*p=*str;
p++;
str++;
f=0;
}
else if(*str>='0'&&*str<='9'){
*p=*str;
p++;
str++;
f=0;
}
else str++;
}
*p='\0';//一定要在数字串结尾加上这个,否则输出结尾时会有乱码
/********** End **********/
}