删除字符串中数字与反转字符串算法

题目描述:

题目描述
根据主函数和头文件提示,编写两个子函数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--;}}