制作从文本中删除所有数字的程序

make program that delete all number from text

我想使用指针编写程序,从文本中删除所有数字,例如,当键盘输入为 "ab1c9" 时,程序结果仅为 "abc"。所以我实际上考虑使用指针并使用没有数字结果的单词覆盖它,但它似乎不起作用:/而且我仍然对什么时候应该使用 * 或不使用感到困惑
这个程序逻辑对吗?.?

#include <stdio.h>
#include <stdlib.h>

void deldigit(char* str) {
    int count = 0;

    while(*str != '[=10=]') {
        if(*str >= '1' && *str <= '9')
            count++;
        else
            *(str - count) = *str; /* want this *str after increment to overwrite *(str-count) */
        str++;
    }

    *(str - count) = '[=10=]';
    printf("%s", str);
}

int main() {
    char str[100];

    printf("inset word");
    scanf("%s", &str);
    deldigit(str);

    return 0;
}

您需要在循环后倒回 str,并且您没有删除字符串中的零,更改为:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

void deldigit(char *str)
{
    char *res = str;
    int count = 0;

    while (*str != '[=10=]') {
        if (isdigit((unsigned char)*str)) {
            count++;
        } else {
            *(str - count) = *str;
        }
        str++;
    }
    *(str - count) = '[=10=]';
    printf("%s", res);
}

int main(void)
{
    char str[100];
    char *ptr;

    printf("insert word: ");
    if (fgets(str, sizeof str, stdin)) {
        if ((ptr = strchr(str, '\n'))) {
            *ptr = '[=10=]';
        }
        deldigit(str);
    }
    return 0;
}

切换到 fgets 以避免缓冲区溢出。