2017-12-03 37 views
0

こんにちは、私は2つの文字列、 "今日は素敵な一日"と "ああ"があるとしましょう。私は最初の文字列に現れる2番目の文字列の文字を削除したいと思います。2つの文字列の間の要素を比較する

これは私の問題です:

char c[20]; 
char p[10]; 
int i,j; 
int l1,l2; 

printf("Enter a string \n"); 
scanf("%s",cd); 

printf("Enter another string \n"); 
scanf("%s",car); 

len1 = strlen(cd); 
len2 = strlen(car); 

for (i=0;i<len1;i++){ 
    for (j=0;j<len2;j++){ 
     if (cd[i]==car[j]){ 
      cd[i]=""; 
     } 
    } 
} 

私が欲しいものは "TDYがいいDYである" のようなものにする第一の文字列です。そこで、後で位置を変えるために要素が同じ位置を空にします。

どうやら "CD [i]を==車[j]は" Cで行うことができない、私は「 'CHAR' から 'のconstのchar *' から無効な変換を得た。

だから私はよほとんど立ち往生。私は助けに感謝します。

+1

どのように 'CD []'と 'のchar []'宣言と初期化されますか? [mcve]を挙げてください。いずれにしても、2つの文字を比較して同等であることは問題ありません。問題のある次の行です。 –

+0

1)本当の完全なエラーメッセージを投稿してください。 2)「cd」と「car」の宣言を掲示する。 – chux

+0

警告をオンにします。 'const char *'を 'char'に代入するので、このコードはコンパイルすべきではありません。つまり、整数へのポインタです。' cd [i] = ""; '文字列リテラル' '' 'は'cd [i]'はおそらく 'char'です。あなたは 'char'の配列を持っています。ポインタを割り当てるだけでは意味のある結果を期待できません。 –

答えて

0

1)これは、できるだけ近くに、あなたのマッチングアルゴリズムのソリューションです。 あなたが必要なものすべてが余分なループであるとcd[i]=0;してコンパイルすることはできませんcd[i]="";を交換します。コンパイラによって与えられたエラーは式cd[i]="";に関連していますcd[i]は文字型であり、文字列""にはtyp char変数へのconst char *cd[i]は文字です""はポインタです。

操作cd[i]=0;は、あなたが望むようにします:後で位置を変えるために要素が同じ位置を空にします。

また
Tdy is nice dy                     
Tdy is nice dy 

、代わりに0で不要な文字をクリアするあなたはそれをスキップすることができます:それは0

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char cd[] = "Today is a nice day"; 
    char tmp[] = "Today is a nice day"; 
    char car[] = "ao"; 
    int i; 
    int j; 
    int k; 

    int len1 = strlen(cd); 
    int len2 = strlen(car); 

    for (i=0;i<len1;i++){ 
     for (j=0;j<len2;j++){ 
      if (cd[i] == car[j]){ 
       cd[i]=0; 
      } 
     } 
    } 

    k = 0; 
    for (i=0; i<len1; i++) 
    { 
     if(cd[i] == 0) 
     { 
     } 
     else 
     { 
      tmp[k] = cd[i]; 
      k++; 
     } 
    }  
    tmp[k] = 0; /* remember to terminate the tmp */ 


    printf("%s\n", tmp); 

    strcpy(cd,tmp); 
    printf("%s\n", cd); 

    return 0; 
} 

OUTPUTに不要な文字を置き換えます。このソリューションは、以下の通りである:

#include <stdio.h> 
#include <string.h> 

int main() 
    { 
     char cd[] = "Today is a nice day"; 
     char car[] = "ao"; 
     int i; 
     int j; 
     int k = 0; 
     int skip = 0; 


     int len1 = strlen(cd); 
     int len2 = strlen(car); 

     for (i=0; i<len1; i++) 
     { 
      for (j=0; j<len2; j++) 
      { 
       if (cd[i] == car[j]) 
       { 
        skip++; // make note that this character is not needed 
       } 
      } 

      if(skip == 0) 
      { 
       cd[k] = cd[i]; // copy the character 
       k++; // increase the position index 
      } 
      else 
      { 
       // skip the copy of charcter; clear the skip marker 
       skip = 0; 
      }    
     } 

     cd[k] = 0; // remember to terminate the new ck string!   
     printf("%s\n", cd); 

     return 0; 
    } 

OUTPUT:

Tdy is nice dy 
+0

この回答はOPが望むことを行うコードを示していますが、何も説明していません。エラーメッセージが 'cd [i] == car [j]'行ではなく、 'cd [i] =" ";' '行にあることは説明していません。エラーメッセージを説明したり、 'cd [i] =" ";'が間違っている理由を説明しません。 –

+0

@EricPostpischil申し訳ありませんが、私はまもなく説明を追加します... – sg7

+0

ああ、文字列と文字の違いについて説明していません。私は自分の間違いを見て、あなたは再配置を含むことさえありました。ありがとうございます。 –

関連する問題