c++ - 看不懂这段c语言代码的思路,目的是删除字符串1中与字符串2相同的字符

浏览:51日期:2023-05-29

问题描述

代码:

char *eliminate(char str1[], char str2[]){int i, j, k; for(i=j=0;str1[i];i++) {for(k=0;str2[k] && str1[i]!=str2[k];k++); if(str2[k]== ‘0’) str1[j++]=str1[i]; }str1[j]=‘0’; return str1;}

感觉根本就没给j赋值啊,也不知道str1[j++]=str1[i]是想做什么。。。求助大神

原问题:

• Write a program to read two strings as input and remove from string1 all characters contained in string 2 • Example:

str1: “Olimpico”

str2: “Oio”

result: “lmpc”

答案全部代码

#include < stdio.h > #define MAXCAR 128char * eliminate(char str1[], char b[]);int main() { char str1[MAXCAR], str2[MAXCAR]; printf(“Give me a string str1: ”); scanf(“ % s”, str1); printf(“Give me a string str2: ”); scanf(“ % s”, str2); printf(“str1 - str2 = % s n”, eliminate(str1, str2)); return 0;}char * eliminate(char str1[], char str2[]) { int i, j, k; for (i = j = 0; str1[i]; i++) {for (k = 0; str2[k] && str1[i] != str2[k]; k++);if (str2[k] == ‘0’) str1[j++] = str1[i]; } str1[j] = ‘0’; return str1;}

问题解答

回答1:

感觉根本就没给j赋值啊

for(i=j=0;str1[i];i++)

也不知道str1[j++]=str1[i]是想做什么。。。求助大神

其实很简单,代码的思路就是一个字节一个字节的处理str1,i是正在读取的位置,j是正在写入的位置。如果i目前的字符在str2中存在了,那么j就可以覆盖他,因此不用++。所以只需要在写的时候才j++,度的时候i总是++,这就是这句代码的意思。

举个例子

str1 = abcbdstr2 = bstep 1. [i][j]abcbd0step 2. a[i][j]bcbd0step 3. a[j]b[i]cbd0step 4. ac[j]c[i]bd0step 5. ac[j]cb[i]d0step 6. acd[j]bd[i]0step 7. acd0[j]d0[i]

到此就结束了。虽然str1里面的字符串是acd0d0,不过因为C语言默认0就是字符串的结尾,所以后面的d0就会被忽略。

回答2:

你的代码我试了下运行不了,应该是一些中英文字符搞混了吧我帮你改了代码,并且运行过了思路都写在注释里了你的ID。。。

#include <stdio.h> #define MAXCAR 128char *eliminate(char str1[], char b[]);int main() { char str1[MAXCAR], str2[MAXCAR]; printf('Give me a string str1: '); scanf('%s', str1); printf('Give me a string str2: '); scanf('%s', str2); printf('str1 - str2 =%sn', eliminate(str1, str2)); return 0;}char *eliminate(char str1[], char str2[]) { int i, j, k; for (i = j = 0; str1[i]; i++) {for (k = 0; str2[k] && str1[i] != str2[k]; k++);//这句代码为了找出str1[i]==str2[k]if(str2[k] == ’0’)//如果在str2中发现有与str1中相同的,但是却是’0’,那就代表其实str2中没有与str1中相同的字符 str1[j++] = str1[i];//那么j就可以写入//else 出现了相同的就舍弃,j不写入 } str1[j] = ’0’;//所有str1中的字符都检查过了,就添加一个’0’收尾 return str1;}

相关文章: