2013-06-22 7 views
-3

텍스트에서 특정 단어를 찾는 함수를 작성하지만 문제가 있습니다. const char 인수를 가져 오는 strcmp_function을 사용하고 []는 cons char이 아닌 반면 문제가 있습니다. 어떻게이 프로그램에이 기능을 사용할 수 있습니다어떻게 strcmp_function을 사용할 수 있습니까

int comparision(const char sentence[ ],char *w) 
{ 
int i, length=0, c=0, l=0; 
int j,count=0; 
char a[20]={'0'}; 
length= strlen(sentence); 
l= strlen(w); 
for (i=0; i<length; i++) 
{ 
    if (sentence[i] == ' '||sentence[i] == '\t'||sentence[i] == '\n') 
    { 
    for(j=0;j<l;j++) 
     a[j]=sentence[j+i+1]; 
    a[j+1]='\0'; 
if(strcmp(a,w)==0) 
    count++; 
    }} 
return count; 
} 
+0

정확히 컴파일러 오류는 무엇입니까? 문자 배열과 문자 포인터는 C++에서 동일한 서명을 갖습니다. – scaryrawr

+0

'strcmp'는 C++가 아니라 C입니다. 이전 버전과의 호환성을 위해 지원됩니다. 하지만,'std :: string'을 사용한다면 왜 문자열을 사용하지 않습니까? 안전한 RAII 기반 (새롭지 않음/삭제)이며 사전 정의 된 강력한 방법이 많이 있습니다 (Coparison 포함). 문자열을 사용하면 간단한 'string1 == string2' 코드가됩니다. – Manu343726

답변

0

이 기능이 (단어를 의미 W) : 함수의 인수 목록에서

int comparision(const char sentence[ ],char *w) 

, 구문과 같은 배열로 선언 된 매개 변수를 여기에 실제로 포인터가 있습니다. 위 함수 선언 정확하게 배열, 표현으로 사용되는 배열의 이름이 array-의 첫 번째 요소에 대한 포인터와 동일 되었더라도

int comparision(const char *sentence,char *w) 

같은되도록 작동 괜찮아. 이 작업을 수행 할 수 있음을 의미

는 :

char str1[] = "Hello"; 
char *str2 = "Hello"; 

int equal = strcmp(str1, str2) == 0; 

strcmp와하는 str1과 전달, str1과는 정확히

int equal = strcmp(&str1[0], str2) == 0; 

&str[0]을하고 같은 그래서, 포인터로 부패 말한다 str1의 첫 번째 요소에 대한 포인터이며 유형이 char *

입니다. 즉 strcmp를 사용하면 문제가 없습니다.

+0

그래도 문법의 사용은 좋지 않습니다. – Griwes

0

가 왜

처럼 뭔가를하려고하지 않습니다 .... 당신은 또한 당신은 문제가 있다면 언급하지만, 문제는없는 것 또는 당신이 할 의도 무엇 때문에 - 이 귀하의 질문에 대답해야한다
int i = 0; 
    while (sentence[i] != '\0') 
    { 
     if (strncmp(&sentence[i], word, l) == 0) 
     { 
      count += 1; 
      i += l; 
     } 
     else 
      i += 1; 
    } 
    return (count); 

strncmp가 배열을 읽었을 때부터 문제가 생길 수 있습니다.

관련 문제