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

时间:2017-05-28 08:42:37

标签: c arrays pointers c-strings

我想使用从文本中删除所有数字的指针来制作程序,例如当键盘的输入是" ab1c9"那么节目结果" abc"只要。所以我实际上考虑使用指针并使用没有数字结果的字覆盖它,但它似乎没有工作:/我仍然混淆我应该何时使用*或不 这个程序逻辑是真的吗?。?

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

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

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

    *(str - count) = '\0';
    printf("%s", str);
}

int main() {
    char str[100];

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

    return 0;
}

1 个答案:

答案 0 :(得分: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 != '\0') {
        if (isdigit((unsigned char)*str)) {
            count++;
        } else {
            *(str - count) = *str;
        }
        str++;
    }
    *(str - count) = '\0';
    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 = '\0';
        }
        deldigit(str);
    }
    return 0;
}

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