я наткнулся на этот фрагмент кода и не понимаю. он рекурсивно проверяет, присутствует ли символ верхнего регистра в строке c ++ - PullRequest
1 голос
/ 11 января 2020

база проверяет наличие нулевого символа, но разве строки c ++ не должны заканчиваться нулем? должен ли базовый случай проверять длину строки?

#include <bits/stdc++.h> 
using namespace std; 

// Function to find string which has 
// first character of each word. 
char first(string str, int i=0) 
{ 
    if (str[i] == '\0') 
         return 0; 
    if (isupper(str[i]))  
            return str[i]; 
    return first(str, i+1); 
} 

// Driver code 
int main() 
{ 
    string str = "geeksforGeeKS"; 
    char res = first(str); 
    if (res == 0) 
        cout << "No uppercase letter"; 
    else
        cout << res << "\n"; 
    return 0; 
} 

Ответы [ 2 ]

2 голосов
/ 11 января 2020

Разве строки C ++ не должны заканчиваться нулем?

Начиная с C ++ 11, std::string гарантированно заканчивается нулем.


должен ли базовый регистр проверять длину строки?

Да, если вы хотите обрабатывать строки, содержащие нулевые символы.

Например,

string str("ab\0cD", 5);
2 голосов
/ 11 января 2020

не являются строками c ++, которые не должны заканчиваться нулем

std::string (гарантированно будет) заканчиваться нулем (начиная с C ++ 11).

должен ли базовый случай проверять длину строки?

Может быть. Но это не обязательно из-за нулевого завершения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...