Как бы я не использовал указатель в этом коде? - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь избежать использования указателя для назначения Когда я избегаю использования указателя, мой код не работает, поэтому я не совсем уверен, что делать. Как бы я изменил этот код, чтобы не использовать указатель?


char* removeVowels(char* userInput) {
    int j = 0;
    char* noVowels = new char[100];

    for (int i = 0; i < strlen(userInput); i++) {

        char character = userinput[i];
        switch (character) {
        case 'a':
        case 'A':
        case 'E':
        case 'e':
        case 'i':
        case 'I':
        case 'o':
        case 'O':
        case 'U':
        case 'u':
            continue;
        default:
            noVowels[j++] = character;
        }
    }
    noVowels[j] = '\0';
    return noVowels;
}

1 Ответ

5 голосов
/ 15 марта 2020

Чтобы избежать указателей, вам нужно изменить интерфейс.

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

Функция, вероятно, должна принимать const std::string& и вернуть std::string (требуется #include<string>):

std::string removeVowels(const std::string& userInput) {
    std::string noVowels;
    for(char character : userInput) {
        //...
        // use `noVowels.push_back(character)` to append `character` to `noVowels`
        //...
    }
    return noVowels;
}

Это также потребует соответствующих изменений на сайте вызова.

Если вы не знаете, что const и / или & означает, затем используйте std::string вместо const std::string&.

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