c语言编程,编写函数,删除字符串中的英文字母、数字字符;并对连续出现的相同字符,将其缩减为一个。

(长度最多为80)大小写
字符串长度最大为80,英文字母大小写都要删除

#include <stdio.h>
void fun(char *s){
    int i,j;
    for(i=0;s[i]>='a' && s[i]<='z' || s[i]>='A' && s[i]<='Z' || s[i]>='0' && s[i]<='9';i++);
    for(s[j=0]=s[i++];s[i];i++)
        if(!(s[i]>='a' && s[i]<='z' || s[i]>='A' && s[i]<='Z' || s[i]>='0' && s[i]<='9') && s[i]-s[j])
            s[++j]=s[i];
    s[j+1]='\0';
}
int main(int argc,char *argv[]){
    char s[81];
    printf("Input a string...\ns=");
    fgets(s,81,stdin);
    fun(s);
    printf("%s",s);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-03-18
int validate(char c) {
    if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9'))
        return 1;//123...abc...ABC...
    else
        return 0;//~!#$*%))^+
}
char *fun(char *str) {
    int i,j;
    for (i=j=0; str[i];) {
        while (str[i] == str[i+1] || validate(str[i])) i++;// 不符合条件i++
        str[j++] = str[i++];//符合条件的覆盖到前面
        str[j] = '\0';//截断后面无用的
    }
    return str;
}
int main() {
    char str[] = "aaaAab#@c124*****(@!";
    printf("%s", fun(str));
    return 0;
}

追答

这份代码就ok啦……
int validate(char c) {
if ((c >= 'a' && c = 'A' && c = '0' && c <= '9'))
return 1;//123...abc...ABC...
else
return 0;//~!#$*%))^+
}
char *fun(char *str) {
char result[80];
int i,j;
for (i=j=0; i < strlen(str); i++)
if (!validate(str[i]) && str[i] != result[j-1])
result[j++] = str[i];
str = result;
return str;
}
int main() {
char str[] = "aaaAab#@c124*****(@!";
printf("%s", fun(str));
return 0;
}

本回答被网友采纳
第2个回答  2017-03-17

#include "stdio.h"
void del_dig(char *p){
    int i,j;
    j=i=0;
    while(p[j]=p[i++])
        if(!(p[j]>='0' && p[j]<='9'))
            j++;
}