2017-11-16 23 views
0

私は問題がある、ポインタを使用してCの他の配列に文字列が存在するかどうかをテストする必要があります。 2つの文字列が完全にされている場合にのみ、テストしているポインタで配列内の文字列を見つける

/* Like the strstr() function. It returns a pointer to the first occurrence of the string aiguille in the string meule_de_foin. 
* @param meule_de_foin the string to search in 
* @param aiguille the string to find 
* @return a pointer to the first occurrence of the string aiguille in the string meule_de_foin if aiguille is in meule_de_foin, NULL otherwise 
*/ 

const char * IMPLEMENT(indexOfString)(const char *meule_de_foin, const char *aiguille) { 
    int isFound; isFound=0; 
    int first; first=meule_de_foin; 

    while(isFound==0){ 
     if(*aiguille=='\0' && *meule_de_foin=='\0'){ 
      isFound=1; 
     } else if (*aiguille == *meule_de_foin){ 
      aiguille=aiguille+1; 
      meule_de_foin=meule_de_foin+1; 
     }else{ 
      isFound=2; 
     } 
    } 

    if(isFound==1){ 
     return (first); 
    }else{ 
     return(NULL); 
    } 
} 

if(isFound==1){ 
    return (first); 
}else{ 
    return(NULL); 
} 
+2

実際にコードが英語の場合はずっと簡単です。 –

+1

あなたの関数は 'meule_de_foin'の先頭に' aiguille'があるかどうかだけをチェックします。 – Barmar

+1

'first'は' int'ではなく 'const char *'でなければなりません。 – Barmar

答えて

5

...事前にありがとう、私はこれを試してみましたが、それは動作しません、誰もが任意の提案を持っている場合...ここで私が試したコードです等しい。

検索する文字列の末尾にいなくても、検索文字列の最後に達したときにチェックを停止する必要があります。

それが見つからない場合は、次の文字から開始して再度確認し、文字列の最後に達するまでこれを繰り返してください。したがって、ループの周りに別のループが必要です。

int isFound = 0; 
const char *first; 
for (first = meule_de_foin; *first != '\0' && isFound != 1; first++) { 
    isFound = 0; 
    const char *search = aiguille; 
    const char *cur = first; 
    while (!isFound) { 
     if (*search == '\0') { // End of search string 
      isFound = 1; 
     } else if (*search != *cur) { // Non-matching character, stop matching 
      isFound = 2; 
     } else { // Keep matching 
      search++; 
      cur++; 
     } 
    } 
} 

if (isFound == 1) { 
    return first; 
else { 
    return NULL; 
} 
+0

ありがとうございました!私は完全に自分の間違いを抱えていて、それをどのように修正したのですか?私は疑問があります。whileループの中で「本当の」意味は何ですか? – createurx

+0

これは、ループが永遠に繰り返されることを意味します。内側の 'break'文がそれを終了することを除いて。 – Barmar

+0

しかし、私は 'isFound'をテストする方法に戻しました。 – Barmar

関連する問題