如何消除所有字母ch1也出现ch2(语言c)

时间:2017-04-12 02:01:01

标签: c

编写一个程序,在键盘上读取两个字符串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);
}

2 个答案:

答案 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