2017-12-03 6 views
0

안녕하세요. "오늘은 좋은 하루입니다."와 "ao"라는 두 개의 문자열이 있다고 가정 해 봅니다. 첫 번째 문자열에 나타나는 두 번째 문자열의 문자를 삭제하고 싶습니다. 내가 원하는 것은 "파견 근무가 좋은 DY입니다"처럼 될 수있는 첫번째 문자열입니다두 문자열 사이의 요소 비교

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

:

이것은 내 문제입니다. 따라서 요소를 나중에 위치를 변경하기 위해 동일한 위치의 요소를 비 웁니다.

분명히 "CD [전] == 자동차 [j]가"C에서 수행 할 수없는, 나는 " '문자'에서 'const를 숯불 *'에서 잘못된 변환을 얻었다.

을 내가 해요 붙어 꽤 많이. 나는 는 당신이 필요로하는 여분의 루프 모든.이 최대한 가까이 알고리즘과 일치하는 솔루션입니다).

+1

어떻게'CD는 []'와'문자는 []'선언 및 초기화? 제발 [mcve]를주세요. 어쨌든 두 문자를 비교하는 것은 아무런 문제가 없습니다. 문제가되는 것은 다음 줄입니다. –

+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]은 문자 유형이므로 일반 문자가있는 "" 문자열을 할당 할 수 없습니다. char 변수에 const 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; 
    } 

출력 :

Tdy is nice dy 
+0

이 답변은 OP가 원하는 것을 수행 할 수있는 코드를 제공하지만 아무 것도 설명하지 않습니다. 오류 메시지가'cd [i] == car [j]'줄이 아니라'cd [i] = "";''줄에 있음을 설명하지는 않습니다. 에러 메시지를 설명하지 못하거나 'cd [i] = "";'가 틀린 이유를 말해줍니다. 문자열과 문자의 차이점을 설명하거나'''와'''를 사용하는 것에 대해서는 설명하지 않습니다.이 결점 때문에 도움이되지 않는 투표로 유감입니다. –

+0

@EricPostpischil 죄송합니다. 곧 설명을 추가하겠습니다 ... – sg7

+0

Ah 나는 실수를보고 심지어 재배치도 포함 시켰습니다. 매우 감사합니다. –