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