2017-04-12 9 views
-1

CH1とCH2の2文字の文字列をキーボードで読み込み、CH1のすべての文字をCH2で表示するプログラムを作成します。 注:ポインタとstrcpyを使用しないでください。すべての文字を削除する方法ch1も表示されます。ch2(言語c)

文字が正しくシフトしていない理由を教えてください。

#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); 
} 
+1

ここでの質問は何ですか? –

+0

あなたは問題を説明しておらず、質問もしていません。これはQ&Aサイトです。答えを得るためには、明確な問題記述*と特定の質問*が必要です。あなたはあなたの課題を投稿し、あなたのコードを投棄しました。あなたの課題を貼り付けることは問題です*あなたが与えられましたが、投稿したコードに関連する問題を説明していないか、まだその問題に関する質問があります。 –

+0

[Rube Goldberg](https://en.wikipedia.org/wiki/Rube_Goldberg)ソリューションを投稿しようとする誘惑は、あまりにも強すぎて抵抗することができません。 – WhozCraig

答えて

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; 
} 

私は基本的にやっていることは、私がCH 2であり、CH1のcharを見つけるたびに、文字列をシフトダウンされます。そして、私は文字列を終端させて正しく印刷し、サイズを1減らします。

+0

ありがとうございますが、これは私が望むものではありません: abacab aa ==> bcab –

+0

@SamirTafrout私は解決策を更新しました – Archmede

+1

ありがとうございます。 –

-1

私はあなたがskipフラグとしてX使用しようとしていると思います。名前を変更します。

iループ内でそのフラグをリセットする必要があります。これは、各文字ごとに異なる値を持つ可能性があるためです。

for (i...) { 
    skip_this_letter = 0; 

    for (j...) { 
     if (...) { 
      skip_this_letter = 1; 
      break; 
     } 
    } 

    if (!skip_this_letter) { 
     // copy letter 
関連する問題