编写一个程序,在键盘上读取两个字符串CH1和CH2,并删除CH1中也出现在CH2中的所有字母。 注意:不使用指针和strcpy。
你能告诉我为什么角色没有正确转移。
#include <stdio.h>
#include <string.h>
int main()
{
char ch1[30], ch2[30], ch3[30];
int i, j, L1, L2, X;
printf("please enter ch1: ");
scanf("%s",ch1);
printf("please enter ch2 : ");
scanf("%s",ch2);
L1=strlen(ch1);
L2=strlen(ch2);
for(i=0;i<L1;i++)
X=0;
for(j=0;j<L2;j++){
if(ch1[i]==ch2[j]){
X=1;
ch1[i]=ch1[i+1];
}
}
printf("result : %s" , ch1);
}
答案 0 :(得分:1)
#include <stdio.h>
#include <string.h>
int main()
{
char ch1[30], ch2[30], ch3[30];
int i, j, L1, L2, X, k;
printf("veuillez saisir ch1: \n");
scanf("%s",ch1);
printf("veuillez saisir ch2 : \n");
scanf("%s",ch2);
L1=strlen(ch1);
L2=strlen(ch2);
for(i=0;i<L1;i++)
for(j=0;j<L2;j++){
if(ch1[i]==ch2[j]){
for(k = i; k < L1 - 1; k++) {
ch1[k]=ch1[k+1];
}
i--;
L1--;
ch1[L1] = '\0';
for(k = j; k < L2 - 1; k++) {
ch2[k]=ch2[k+1];
}
L2--;
ch2[L2] = '\0';
break;
}
}
printf("Chaîne résultat : %s\n" , ch1);
return 0;
}
我基本上做的是每当我在ch1中的ch1中找到一个字符时,就将字符串向下移动。然后我终止字符串以使其正确打印并将大小减小1.
答案 1 :(得分:-1)
我认为您正在尝试将X
用作skip
标记。重命名它。
您必须在i
循环内重置该标志,因为每个字母可能会有不同的值。
for (i...) {
skip_this_letter = 0;
for (j...) {
if (...) {
skip_this_letter = 1;
break;
}
}
if (!skip_this_letter) {
// copy letter