代码:
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 string
1 all characters contained in string 2
• Example:
str1: “Olimpico”
str2: “Oio”
result: “lmpc”
答案全部代码
#include < stdio.h >
#define MAXCAR 128
char * 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;
}
for(i=j=0;str1[i];i++)
其實很簡單,程式碼的思路就是一個位元組一個位元組的處理str1,i是正在讀取的位置,j是正在寫入的位置。如果i目前的字元在str2中存在了,那麼j就可以覆蓋他,因此不用++。所以只需要在寫的時候才j++,度的時候i總是++,這就是這句程式碼的意思。
舉例
到此就結束了。雖然str1裡面的字串是acd
你的程式碼我試了下運行不了,應該是一些中英文字符搞混了吧
我幫你改了代碼,並且運行過了
思路都寫在註釋裡了
你的ID。 。 。