2016-12-14 7 views
0

単語と単語を検索する文字の2つの引数を持つ関数を作成しようとしています。C - 単語内の文字を検索する

実際には、各文字が配列の要素である配列です。単語 "word"の場合、次のようになります。 word = [w、o、r、d]

したがって、私は文字に[]ワードの各要素を比較する必要があり、それらが機能に一致する場合は1を返す必要があり、そうでなければ0 コードは、以下である:

char ltt_srch(char word[], char ltt)//LINE 13 
{ 
    int len, i; 
    len = sizeof(word)/sizeof(word[0]); 
    for(i = 0; i < len; i++) 
    { 
     if(ltt == word[i]) 
     { 
      return 1; 
     } 
    } 
    return 0; 
} 

私はltt_srchを呼び出します具体的には、

if(ltt_srch(word[len], ltt) == 0)//LINE 51 
{ 
    printf("Letter not found.\n"); 
} 

が、私は1つの警告と1つのノートを取得:メインこのコードを使用して

Line 13: [Note] Expected 'char *' but argument is of type 'char'

Line 51: [Warning] passing argument 1 of 'ltt_srch' makes pointer from integer without a cast

+1

あなたはltt_searchとしてltt_search呼び出すと思ったほとんどの場合(ワード、LTT)は(言葉をltt_srchない[LEN]を、 ltt) –

+0

あなたの関数は配列を期待していますが、 'char'を送信しています。あなたの 'if'では、' word [len] 'を単に' word'に変更します。 – Aidin

+0

バイナリ検索を使ってこの関数の速度を 'O(N)'から 'O(logN)'に改善することができます。 – RoadRunner

答えて

2

問題は、あなたが最初のパラメータとしてword[len]代わりのwordを渡しているということです。 word[len]に合格した場合はwordの代わりにlenの文字をwordに渡します。

たとえば、word = "word"およびlen = 2の場合は、word[len] == 'r'です。

ソリューション:

if(ltt_srch(word, ltt) == 0)の代わりif(ltt_srch(word[len], ltt) == 0)

0

この:

len = sizeof(word)/sizeof(word[0]); 

が間違っています。関数内にsizeofを使用して、そのような引数として渡される配列のサイズを取得することはできません。

あなたは意味:

ltt_srch(word[len], ltt) 
:あなたはC.

で一般的な文字列で動作するように、ターミネータを検索する必要が

const size_t len = strlen(word); 

はまた、あなたはこの、間違ったそれを呼んでいます

wordにサブスクリプトされていますが、それは文字を生成しますが、配列自体を渡す必要があります。

ltt_srch(word, ltt) 

最後に、標準ライブラリは既にこの機能を持っている、strchr()を検索:

int ltt_srch(const char *word, chr ltt) 
{ 
    return strchr(word, ltt) != NULL; 
} 
0
#include <stdio.h> 
#include <stdlib.h> 

int ltt_srch(char word[], char ltt); 

int 
main(void) { 
    char *word = "word"; 
    char key = 'r'; 

    if (ltt_srch(word, key)) { 
     printf("Letter found.\n"); 
    } else { 
     printf("Letter not found.\n"); 
    } 

    return 0; 
} 

int 
ltt_srch(char word[], char ltt) { 
    int i; 

    for(i = 0; word[i] != '\0'; i++) { 
     if(ltt == word[i]) { 
      return 1; 
     } 
    } 
    return 0; 
} 
関連する問題