输入字符串,删除数字字符并统计数字字符个数

输入字符串,删除数字字符并统计数字字符个数,要求使用deldigital函数,原型为 int deldigital(char*s)


#include <stdio.h>

int deldigital(char *s) {
    int count = 0;//个数 
    int i, j = 0;//双指针删除法  
    /*
    使用两个指针变量 i 和 j,其中 i 指向当前处理的字符,j 指向删除数字字符后字符串的下一个位置。
    遍历输入的字符串,如果当前字符为数字字符,计数器 count 加 1;
    否则将该字符拷贝到 j 指向的位置,并将 j 加 1。
    最后将 j 指向的位置赋值为字符串结束标志 \0。
    */ 
    for (i = 0; s[i] != '\0'; i++) { 
        if (s[i] >= '0' && s[i] <= '9') {
            count++;
        } else {
            s[j++] = s[i];
        }
    }
    s[j] = '\0';
    return count;
}

int main() {
    char str[100];
    printf("请输入字符串:");
    scanf("%s", str);
    int count = deldigital(str);
    printf("删除数字字符后的字符串为:%s\n", str);
    printf("数字字符个数为:%d\n", count);
    return 0;
}

img

供参考:

#include <stdio.h>
int deldigital(char* s) 
{
    int i, j, cnt;
    for (i = 0, j = 0, cnt = 0; s[i]; i++)
    {
        if (s[i] < '0' || s[i]>'9')
            s[j++] = s[i];
        else
            cnt++;
    }
    s[j] = '\0';
    return cnt;
}
int main()
{
    int cnt;
    char str[128];
    gets(str);
    cnt = deldigital(str);
    printf("%s, digit:%d", str, cnt);
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7694809
  • 以下回答来自chatgpt:

    解决方案:

    首先,你可以调用函数deldigital(char* s)来删除字符串中的数字字符。这个函数需要一个指向字符数组的指针作为参数,并返回一个指向修改后的字符数组的指针。以下是一个示例代码:

    char* deldigital(char* s) {
        int len = strlen(s);
        char* result = (char*)malloc(len+1);
        int count = 0;
        for(int i=0; i<len; i++) {
            if(!isdigit(s[i])) {
                result[count] = s[i];
                count++;
            }
        }
        result[count] = '\0';
        return result;
    }
    

    此函数遍历输入的字符串,当字符不是数字时将其保存在新的字符数组中并计数,最终返回新的字符数组。需要注意的是,在计数数字字符之前需要先遍历一遍字符串以确定新字符数组的大小,因此需要先使用strlen函数计算字符串长度。

    接下来你需要统计原字符串中数字字符的个数。一个简单的方法是在函数deldigital中记录数字字符的个数并返回,但这需要修改函数返回值。另一种方法是在主函数中调用strlen和strlen(deldigital)函数来计算数字字符的个数。以下是一个示例代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    
    char* deldigital(char* s) {
        int len = strlen(s);
        char* result = (char*)malloc(len+1);
        int count = 0;
        for(int i=0; i<len; i++) {
            if(!isdigit(s[i])) {
                result[count] = s[i];
                count++;
            }
        }
        result[count] = '\0';
        return result;
    }
    
    int main() {
        char str[] = "abc123def456";
        char* newstr = deldigital(str);
        int digitcount = strlen(str) - strlen(newstr);
        printf("new string: %s\n", newstr);
        printf("digit count: %d\n", digitcount);
        free(newstr);
        return 0;
    }
    

    在主函数中,我们首先声明一个字符串"abc123def456"以及一个变量digitcount用于保存数字字符的个数。然后我们调用函数deldigital去除字符串中数字字符并返回新的字符串newstr。之后我们使用strlen函数计算原字符串长度与新字符串长度的差,即数字字符的个数,并打印输出。最后我们释放newstr的内存空间,避免内存泄漏。

    需要注意的是,在使用malloc函数为新字符数组分配内存空间时应该分配len+1个字节的空间,并在新字符数组的末尾加上一个空字符'\0',以保证字符串的终止符。同时在使用完newstr后应该使用free函数释放其占用的内存空间。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^