2016-11-13 13 views
0

s内に現れるc の最後の外観へのポインタを返し、sがs内にない場合はnullptr(0)を返します。Cスタイルの文字列内の最後の文字列へのポインタを返します(C++)

#include <string> 
#include <iostream> 
#include <cassert> 
using namespace std; 

const char* myStrRChr(const char* s, char c) 
{ 
    int curIdx = 0; 
    char last; 

    while (s[curIdx] != '\0') 
    { 
     if (s[curIdx] == c) 
      last = s[curIdx]; 
     curIdx++; 
    } 
    if (s[curIdx] == c) 
     return last; 
    else 
     // return '\0', nullptr, NULL 
     return ""; 
} 


int main() 
{ 
    char cstr[50] = "Abadabadoo!"; 
    char buf[10]; 
    const char * cat = "cat"; 
    char dog[] = "Labradoodle"; 

    cout << "\nmyStrRChr(cstr, 'a') expects adoo!" << endl; 
    cout << " -- " << myStrRChr(cstr, 'a') << endl; 

    return 0; 
} 

このコードは "adabadoo!"を返します。私は "char c"の最後のインスタンスを取得する方法について私の心を包み込むことはできません。

+0

インデックスではなくポインタが必要ですか? – mkmostafa

+2

間違っていることを見つけ出す必要があります。 –

+0

'while'ループは無限大です。これがあなたが使用しているコードだと確信していますか? – PaulMcKenzie

答えて

0

あなたはループを停止する場所を知るために、文字列の末尾へのポインタを取得し、文字c、および文字列の先頭へのポインタを検索文字列を下に減少させることによってこれを行うことができます。

const char *mystrrchr(const char *str, char c) 
{ 
    int len = strlen(str); 
    char *p = const_cast<char *>(&str[len-1]); 
    char *stop = const_cast<char *>(&str[0]); 
    while(p>=stop) 
    { 
     if(*p==c) 
     { 
      return p; 
     } 
     p--; 
    } 
    return nullptr; 
} 
+0

お返事ありがとうございます。しかし、この特定の問題は、const char * strとchar cのパラメータをとります。 const char *も返すことになっています。この問題に対処するにはどうすればいいですか? – Mark

+0

@マーク、あなたのユースケースに合わせて私の答えを編集 –

+0

あなたの洞察力を大変ありがとう!私は説明を感謝します。 – Mark

関連する問題