user-0 提问: C语言指针之删除字符串中的数字

回复:
user: user-1
content: #include <stdio.h> #include <ctype.h>  void del_digit(char *str) {   int i, j;   while (*str) {     while (isdigit(*str)) {       for(i = 0, j = 1;*(str + i) = *(str + j), *(str + j) != 0; i++, j++);       *(str + j) = '\0';     }     *str++;   } }  int main(void) {   char str[] = "d32a2b";   del_digit(str);   printf("%s\n", str);   return 0; }

user: user-1
content: #include <stdio.h> #include <ctype.h>  void del_digit(char *str) {   int i, j;   while (*str) {     while (isdigit(*str)) {       for(i = 0, j = 1;*(str + i) = *(str + j), *(str + j) != 0; i++, j++);       *(str + j) = '\0';     }     *str++;   } }  int main(void) {   char str[] = "d32a2b";   del_digit(str);   printf("%s\n", str);   return 0; }

user: user-2
content: 引用 4 楼 Mikeoperfect 的回复:[quote=引用 3 楼 qq_36409192 的回复:] #include <stdio.h> #include <stdlib.h> int main () { 	int i,j; 	char *str=(char *)malloc(60*sizeof(char)); 	scanf("%s",str); 	for(i=0;str[i];i++) 	{ 		if(str[i]<'9'&&str[i]>'0') 		{ 			for(j=i+1;str[j];j++) 				str[j-1]=str[j]; 			str[j-1]='\0'; 			i--; 		} 	} 	printf("%s\n",str); 	free(str); 	return 0; }数组当然好做了，重点就是指针不好弄[/quote] 数组退化不就是指针了，str[i]退化为指针就是*(str+i)。

user: user-3
content: 引用 5楼我是你的主体 的回复:[quote=引用 1 楼 paschen 的回复:] *(str+i)='\0';  改成：  *(str+j)='\0';可否解释一二呢，确实起到了作用[/quote]删除数字之后的结尾在j  而i是删除前的长度

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:仅供参考：#include <stdio.h> #include <string.h> char s[256]; char *p; int r,n,i; int main() {     while (1) {         printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");         fgets(s,256,stdin);         if ('\n'==s[0]) break;         p=s;         while (1) {             p=strstr(p,"%20");             if (p) {                 memmove(p+1,p+3,strlen(p)-3+1);                 p[0]=' ';             } else break;         }         p=s;         while (1) {             p=strstr(p,"你懂得");             if (p) {                 memmove(p+6,p+6,strlen(p)-6+1);                 for (i=0;i<6;i++) p[i]='X';             } else break;         }         printf("%s",s);     }     return 0; } //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //abcdefg%20helloworld%20something.pdf //abcdefg helloworld something.pdf //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //这是测试文字你懂得，在这个你懂的地方，就得做你懂得的事 //这是测试文字XXXXX，在这个你懂的地方，就得做XXXXX的事 //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //   果然是仅供参考，这里面都不知道出现了多少不知名的函数了。。。。

user: user-0
content: 引用 1 楼 paschen 的回复:*(str+i)='\0';  改成：  *(str+j)='\0';可否解释一二呢，确实起到了作用

user: user-0
content: 引用 3 楼 qq_36409192 的回复:#include <stdio.h> #include <stdlib.h> int main () { 	int i,j; 	char *str=(char *)malloc(60*sizeof(char)); 	scanf("%s",str); 	for(i=0;str[i];i++) 	{ 		if(str[i]<'9'&&str[i]>'0') 		{ 			for(j=i+1;str[j];j++) 				str[j-1]=str[j]; 			str[j-1]='\0'; 			i--; 		} 	} 	printf("%s\n",str); 	free(str); 	return 0; }数组当然好做了，重点就是指针不好弄

user: user-2
content: #include <stdio.h> #include <stdlib.h> int main () { 	int i,j; 	char *str=(char *)malloc(60*sizeof(char)); 	scanf("%s",str); 	for(i=0;str[i];i++) 	{ 		if(str[i]<'9'&&str[i]>'0') 		{ 			for(j=i+1;str[j];j++) 				str[j-1]=str[j]; 			str[j-1]='\0'; 			i--; 		} 	} 	printf("%s\n",str); 	free(str); 	return 0; }

user: user-4
content: 仅供参考：#include <stdio.h> #include <string.h> char s[256]; char *p; int r,n,i; int main() {     while (1) {         printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");         fgets(s,256,stdin);         if ('\n'==s[0]) break;         p=s;         while (1) {             p=strstr(p,"%20");             if (p) {                 memmove(p+1,p+3,strlen(p)-3+1);                 p[0]=' ';             } else break;         }         p=s;         while (1) {             p=strstr(p,"你懂得");             if (p) {                 memmove(p+6,p+6,strlen(p)-6+1);                 for (i=0;i<6;i++) p[i]='X';             } else break;         }         printf("%s",s);     }     return 0; } //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //abcdefg%20helloworld%20something.pdf //abcdefg helloworld something.pdf //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //这是测试文字你懂得，在这个你懂的地方，就得做你懂得的事 //这是测试文字XXXXX，在这个你懂的地方，就得做XXXXX的事 //请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX": //

user: user-3
content: *(str+i)='\0';  改成：  *(str+j)='\0';