Как заставить эту рекурсивную функцию извлекать заглавные буквы из строки? - PullRequest
0 голосов
/ 03 февраля 2020

Таким образом, функция должна возвращать все заглавные буквы из строки, но возвращает только первую букву, ЕСЛИ это заглавная буква. Поэтому я считаю, что i + 1 не работает. А также, я должен использовать рекурсию для этого кода. Мне не разрешено использовать isupper() или любые другие "ярлыки". Так кто-нибудь видит, что не так в коде?

string Return_Caps(const string& s, int pos = 0){
    string temp;
    string a;
    if(s[pos] < 'A' && s[pos] > 'Z'){ // if the position does not have any capital letters, return a
        return a;
    }
    else{
        if(s[pos] >= 'A' && s[pos] <= 'Z'){ 
            temp = temp + s[pos];
            Return_Caps(s, pos + 1);
        }
    }
    return temp; 
}



1 Ответ

0 голосов
/ 03 февраля 2020

Вы не можете использовать свою функцию, потому что при каждом новом вызове вы определяете новую строку.

Следующая функция работает как хотелось бы.

#include<string>
#include<iostream>

std::string Return_Caps(const std::string& s, size_t pos=0){

    if( s.size()== pos) return "";//base case
    if(s[pos] >= 'A' && s[pos] <= 'Z') return s[pos]+Return_Caps(s, pos+1);//capital found
    else return ""+Return_Caps(s, pos+1);//non capital lette

}

//To test
int main(){

    std::string s {"W0oe3fQWEkjkUYUnnQ"};

    std::string capitals = Return_Caps(s, 0);

    std::cout<<capitals;
}
...