2017-12-03 217 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

啊,我看到了我的错误,甚至包括了重新定位!,非常感谢 –