2017-12-03 216 views
0

你好,讓我們說我有2個字符串,「今天是美好的一天」和「AO」。我想刪除出現在第一個字符串中的第二個字符串的字符。比較元素

這是我的問題:

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]=""; 
     } 
    } 
} 

我要的是第1串像 「TDY是好的DY」。所以我清空元素相同的位置以便稍後重新定位。

顯然 「CD [I] ==汽車[J]。」 不能是c上做的,我得到了「從 '爲const char *' 到 '炭' 轉換無效。

所以我幾乎卡住了。我會感謝任何幫助。

+1

如何'CD []'和'的char []'聲明並初始化?請給[mcve]。無論如何,比較兩個角色的平等沒有問題。這是你的下一個問題。 –

+0

1)發佈真實且完整的錯誤消息。 2)發佈'cd'和'car'的聲明。 – chux

+0

打開警告。這段代碼甚至不應該編譯,因爲你正在爲'char'指定一個'const char *',即指向一個整數的指針:'cd [i] =「」;'字符串文字'「」'是當分配給某個東西時轉換爲指針,而cd [i]'大概是'char'。你有一個'char'數組。你不能只是開始分配指針並期待有意義的結果。 –

回答

0

1)這是你的算法匹配儘可能接近的解決方案。 所有你需要的是一個額外的循環和更換cd[i]="";不能用cd[i]=0;進行編譯;編譯器給出的錯誤涉及到表達式cd[i]="";cd[i]是一種字符類型,您不能分配字符串"",它具有typ e const char *爲char變量。 cd[i]是一個字符""是一個指針。

操作cd[i]=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:

Tdy is nice dy                     
Tdy is nice dy 

或者,而不是清除不需要的字符爲0,你可以跳過它。下面這個方案給出:

#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] =「」;'行,而不是'cd [i] == car [j]'行。它沒有解釋錯誤信息或者說爲什麼'cd [i] =「」;'不正確。它不解釋字符串和字符或使用'「''與''之間的區別。因爲這些缺點,我很想將其否決爲無益的。 –

+0

@EricPostpischil對不起,我會補充解釋不久... – sg7

+0

啊,我看到了我的錯誤,甚至包括了重新定位!,非常感謝 –