题目描述:
题目描述
根据主函数和头文件提示,编写两个子函数void removeDigits(char *s);和void reverseStr(char *s);,其功能分别为:删除字符串s中的数字字符;将字符串 s 逆序。其中,当s的长度为0时,void reverseStr(char *s);需要在s中保存表示"NoCharacters"的字符串。
输入格式
输入一个长度不超过100的字符串 s。
输出格式
先移除字符串s中的所有数字符号,再输出处理后的字符串的逆序。
输入样例1
11A2b3C45
输出样例1
CbA
输入样例2
AAbbccDD
输出样例2
DDccbbAA
输入样例3
1234567
输出样例3
NoCharacters
说明:输入的字符串全是数字字符,移除数字字符后字符串长度为0,此时void reverseStr(char *s);需要在s中保存表示"NoCharacters"的字符串。
算法:
思路:
移除字符串中的数字,可以使用ctype.h头文件中的isdigit函数来判断数字,并用双指针来逐渐覆盖原字符串,要注意的是,覆盖完后要在字符串末尾加上'\0'结束符
反转字符串遍历进行字符交换即可,同时注意0的情况
代码实现:
# include<stdio.h>
# include<stdlib.h>
# include<string.h>
# include<ctype.h>
void swap(char *a,char *b){
char ch=*a;
*a=*b;
*b=ch;
}
void removeDigits(char *s){
int len=strlen(s);
int i,j;
for(i=0,j=0;i<len;i++){
//判断数字
//双指针
if(!isdigit(s[i])) s[j++]=s[i];
}
s[j]='\0';//结束符号
}
void reverseStr(char *s){
int len=strlen(s);
int index=len-1;
//无字符情况
if(len==0){
//memset(s,0,sizeof(s));
strcpy(s,"NoCharacters");
return;
}
//交换前后字符
for(int i=0;i<index;i++){
// ch=s[i];
// s[i]=s[index];
// s[index]=ch;
swap(&s[i],&s[index--]);
//index--;
}
}