我想使用从文本中删除所有数字的指针来制作程序,例如当键盘的输入是" 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;
}
答案 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
以避免缓冲区溢出。