2014-09-28 288 views
1

我剛開始學習C編程和練習,我發現一個任務。首先,我必須掃描兩個字符串。然後,我必須逐字比較它們,如果有任何相同的字符,我必須打印出相同字符的數量。 它必須用指針來完成。因此,讓我有「船」和「船」,所以程序將返回0.但如果它是「船」和「肥皂」它將返回2.c檢查兩個字符串爲相同的字符

這是我迄今爲止,但當我運行它會給我錯誤。我把錯誤置於評論中。

在此先感謝您的幫助。

#include <stdio.h> #include <string.h> int number_of_same_characters(char *, char *); int main() { char * first[100]; char * second[100]; int result = 0; printf("Enter first string\n"); gets(*first); printf("Enter second string\n"); gets(*second); result = number_of_same_characters(*first, *second); printf("%d\n", result); return 0; } int number_of_same_characters(char *p, char *q){ //i get this error here - error: invalid type argument of unary ‘*’ (have ‘int’) int counter = 0; for(int j = 0; *p[j] != '\0' || *q[j] != '\0'; ++j){ //i get this error here - error: invalid type argument of unary ‘*’ (have ‘int’) if(strcmp(*p[j], *q[j])){ ++counter; } } return counter; }
+0

'字符*第一個[100];' - >'炭第一[100]; ' - >'獲取(第一)' - >'number_of_same_characters(第一,第二)' - > ...等 – BLUEPIXY 2014-09-28 15:46:26

+1

['gets' is evil](https://www.gnu.org/software/的libc /手動/ html_node /線路Input.html#指數得到)。不要使用它。 – 5gon12eder 2014-09-28 15:49:14

回答

0

您錯誤地定義了字符數組,並且錯誤地使用了運算符*。

嘗試使用以下

#include <stdio.h> 
#include <string.h> 

#define N 100 

int number_of_same_characters(const char *, const char *); 

int main() 
{ 
    char first[N]; 
    char second[N]; 
    int result = 0;  
    size_t n; 

    printf("Enter first string: "); 
    fgets(first, N, stdin); 

    n = strlen(first); 
    if (first[n - 1] == '\n') first[n - 1] = '\0'; 

    printf("Enter second string: "); 
    fgets(second, N, stdin); 

    n = strlen(second); 
    if (second[n - 1] == '\n') second[n - 1] = '\0'; 

    result = number_of_same_characters(first, second); 

    printf("%d\n", result); 

    return 0; 
} 

int number_of_same_characters(const char *p, const char *q) 
{ 
    int counter = 0; 
    int i; 

    for(i = 0; p[i] != '\0' && q[i] != '\0'; ++i) 
    { 
     if (p[i] == q[i]) ++counter;   
    } 

    return counter; 
} 

如果進入船和肥皂那麼輸出將是

2 
+0

非常感謝!它的工作原理。 – niko85 2014-09-28 17:26:06

+0

@ niko85我有一個錯字。應該有(i = 0; p [i]!='\ 0'&& q [i]!='\ 0'; ++ i) – 2014-09-28 17:44:32

4

主要是你已經得到了很多的額外*的亂扔垃圾的計劃。變量的聲明應該是:

char first[100]; 
char second[100]; 

輸入調用應該是

gets(first); 
gets(second); 

方法調用應該是:

result = number_of_same_characters(first, second); 

最後不應該有任何for循環中的解引用。

for(int j = 0; p[j] != '\0' || q[j] != '\0'; ++j){  
    if(strcmp(p[j], q[j])){  
     ++counter;   
    }   
} 

這會讓你更接近,雖然仍然有一些問題。作爲提示,||運營商是可疑的,你不需要使用strcmp

值得指出的是gets()是一個危險的函數,可能會導致緩衝區溢出。當你剛剛起步時可以使用它,但不要讓它成爲一種習慣,並且永遠不要在生產代碼中使用它!

相關問題