2013-06-22 90 views
-3

我寫了一個函數來查找文本中的特定單詞,但是我遇到了一個問題,我使用strcmp_function來獲取const char參數,而[]不是cons char。我怎麼可以使用此功能在這個程序(W指字)我該如何使用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

你有這樣的功能:

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

在一個函數的參數列表,數組像語法聲明的參數你在這裏的確是一個指針。上述函數聲明是完全相同

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

即使它是一個數組,作爲表達使用時的陣列的名稱相同的指針的第一個元素在基於陣列,使得作品沒問題。

這意味着你可以這樣做:

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

int equal = strcmp(str1, str2) == 0; 
傳遞STR1到strcmp時

,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剛纔讀的陣列