C语言,删除字符串中的指定字符,求找错~
#include<stdio.h> #include<string.h> main() { int l1,l2,i,j,k; char a[20],b[20],c[20]; scanf("%s%s",a,b); l1=strlen(a); l2=strlen(b); for(i=0;i<l2;i++) for(j=l1-1;j>=0;j--) if(a[j]==b[i]) { for(k=j;k<l1;k++) a[k]=a[k+1]; } printf("%s\n",a); } 输入两个字符串 s1 和 s2 ,在 s1 中删除任何 s2 中有的字符。例如, s1 :“ abc123ad ”, s2 :“ a1 ” ,则输出“bc23d ”。 输入: 两个字符串 s1 和 s2 输出: 删除后的字符串 s1
你的错误就在于没有充分认识到c语言的字符串是以\0为结束符的 你的移动了字符后,没有在新字符传的尾部加上\0, 导致的结果是输出的数据后面出现有重复的字符。
你的算法存在不足是你出现这个问题的主要原因 你应该这样处理: 循环处理s1的所有字符,如果该字符出现在s2中,那么就不再处理 如果没有出现在s2中,就将该字符保存在第三个字符串中, 最后将第三个字符串的数据尾部增加\0后拷贝到s1中 这个效率要比你的算法效率高,不易出错 下面是实例代码: /** * 将字符串s1中的出现在s2中的字符全部删除,并在s1中返回 * @param s1 * @param s2 * @return */ char *rm(char *s1, char *s2) { int iLen1; int iLen2; int flag; int i, j, k; char *tmp; char ch; if ((s1 == NULL) || (s2 == NULL)) { //字符串有问题 return s1; } iLen1 = strlen(s1); iLen2 = strlen(s2); //申请临时空间,注意最后要有\0,因此多申请一个 tmp = (char*) malloc((iLen1 + 1) * sizeof (char)); if (tmp == NULL) { //申请空间失败,没有办法处理了,只好返回NULL return NULL; } k = 0; for (i = 0; i < iLen1; i++) { ch = s1[i]; flag = 0; for (j = 0; j < iLen2; j++) { if (s2[j] == ch) { //该字符在s2中出现,不做任何处理 flag = 1; break; } } if (0 == flag) { //该字符没有出现在s2中,加入到临时空间中 tmp[k] = ch; k++; } } //设置结束标志 tmp[k] = '\0'; strcpy(s1, tmp); //拷贝到目标传中 free(tmp); //释放申请的临时空间 return s1; } 下面是数组的: /** * 将字符串s1中的出现在s2中的字符全部删除,并在s1中返回 * @param s1 * @param s2 * @return */ char *rm(char s1[], char s2[]) { int iLen1; int iLen2; int flag; int i, j, k; char ch; if ((s1 == NULL) || (s2 == NULL)) { //字符串有问题 return s1; } iLen1 = strlen(s1); iLen2 = strlen(s2); k = 0; for (i = 0; i < iLen1; i++) { ch = s1[i]; flag = 0; for (j = 0; j < iLen2; j++) { if (s2[j] == ch) { //该字符在s2中出现,不做任何处理 flag = 1; break; } } if (0 == flag) { //该字符没有出现在s2中 if (i != k) { //以前已经删除了一些字符,导致需要调整字符位置了 s1[k] = ch; } k++; } } //设置结束标志 s1[k] = 0; return s1; }。
c中存的是回车
修改后: void main() { int l1,l2,i,j; char a[20],b[20],c[20] = {0},d[20] = {0}; scanf("%s%s",a,b); l1=strlen(a); l2=strlen(b); for(i=0;i
问:挺简单的一C函数,不过我是初学者,暂时还不会写,请好心人多多帮忙!
答:int mystrlen(char *str) { int n = 0; while (*str) { n++; str++;} return n; } voi...详情>>