2016-11-13 49 views
0

如果c沒有出現在s中,則返回一個指向c出現在s和nullptr(0)中的c 的最後一次出現的指針。返回一個指向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

@Mark,編輯我的答案以適合您的使用案例 –

+0

非常感謝您的洞察!我讚賞解釋。 – Mark