C++ / Указатель(pointer) / передача в функцию (pass to function) forbids comparison between pointer and integer [-fpermissive]

118
22 апреля 2022, 12:10

//Преобразование "строки" в "СТРОКУ"

void fFirstF(string ***fSent){
    int nLen = 10; //Потому что nLen = ***fSent.length() не работает
    for(int i = 0; i < nLen; i++){
        if ( ***(fSent + i) >= 'a' && (fSent[i]** <= 'z')){    // ***(fSent + i) ошибка тут
            ***(fSent + i) -= 32;
        }
    }
}
Answer 1

По факту, string (если это std::string) это класс, а не голый указатель/массив и к нему нельзя применять адресную арифметику. Для обычных массивов a[b] == *(a+b), а для классов, у которых определен operator[] такое не работает. Собственно об этом компилятор и говорит. Что делать? либо писать так, как того хочет язык с++ (fSent[i]) либо переходить на си или те языки, которые соответствуют Вашим желаниям.

void fFirstF(string& fSent){
    int nLen = fSent.length();
    for(int i = 0; i < nLen; i++){
        if ( fSent[i] >= 'a' && fSent[i] >= 'a'){
           fSent[i] += 22;
        }
    }
}

и сразу видно, что что то пошло не так - условие дублируется.

Посмотрел в код, поправил его максимально сохраняя стиль

void fMain(string *fSent);
void fFirstF(string* fSent) {
    int nLen = 10;
    for(int i = 0; i < nLen; i++){
        if ( (*fSent)[i] >= 'a' && (*fSent)[i] <= 'z'){
             (*fSent)[i] += 22;
        }
    }
}
void fIsQuit(char chIsQuit, string *fSent)
{
    switch (chIsQuit)
    {
        case '1':{
            fFirstF(fSent);
            fMain(fSent);
            break;
        } 
        case 'f':{ return; } 
    }
} 
void fMain(string *fSent) {
    char chAnsw = ' ';
    cin >> chAnsw;
    fIsQuit(chAnsw, fSent);
}
int main()
{
    string sSent = "";
    getline(cin, sSent);
    fMain(&sSent);
}

теперь оно как минимум компилится. Также поправил знак возле 'z'. И понял, почему возникло сколько звездочек - при каждой передаче параметра в новую функцию, почему то появляется амерсанд... не нужно так.

READ ALSO
удалить символы из определенного интервала строки и вставки на их место другую строку С++

удалить символы из определенного интервала строки и вставки на их место другую строку С++

помогите с задачей, очень прошу! готов и очень хочу разбираться

214
Проблема с boolean-ом в C++

Проблема с boolean-ом в C++

Почему этот boolean может запуститься без SDL_Event event, когда должен только с SDL_Event event?

134
c++ программирование

c++ программирование

С двумерным массивом, состоящим из n вещественных элементов, выполнить следующее: преобразовать массив, удалив из него одинаковые элементыОсвободившиеся...

135
Почему в тип данных из двух бит я не могу записать нужное мне число?

Почему в тип данных из двух бит я не могу записать нужное мне число?

Есть структура, которая хранит чимсло из 2 бит, все верно же?

99