Ожидаемое первичное выражение до ошибок 'const'

Пожалуйста помоги. Я получаю много ошибок.

sub2.cpp: В функции 'int main()': sub2.cpp:11:14: ошибка: недопустимое преобразование из 'const char*' в 'char' [-fpermissive] sub2.cpp:12:14: ошибка: недопустимая преобразование из 'const char*' в 'char' [-fpermissive] sub2.cpp:16:17: ошибка: ожидаемое первичное выражение перед 'const' sub2.cpp:16:36: ошибка: ожидаемое первичное выражение перед 'const 'sub2.cpp:11:6: предупреждение: неиспользуемая переменная' external '[-Wunused-variable] sub2.cpp:12:6: предупреждение: неиспользуемая переменная' inner '[-Wunused-variable] make: * [sub2] Ошибка 1

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

char *Subtract(const char *outer, const char *inner);

int main()
{
    char outer = "Bookkepper";
char inner = "keep";

char *word = new char[50];

word = Subtract(const char &outer, const char &inner);

cout << word << endl;
return 0;
}


char *Subtract(const char *outer, const char *inner)
{
int olen = strlen(outer);
int first_occ_idx = -1;
for(int i=0; i < olen; i++){
    if(strncmp(outer+i, inner,strlen(inner)) == 0){
    first_occ_idx = i;
    }
}
if(first_occ_idx == -1){
    return NULL;
}
int ilen = strlen(inner);
int xx = olen - ilen;
char *newstr = new char[xx];
int idx = 0;
for(int i=0; i < first_occ_idx; i++){
    newstr[idx++] = outer[i];
}
for(int i=first_occ_idx+ilen; i < olen; i++){
    newstr[idx++] = outer[i];
}
newstr[idx] = '\0';
return newstr;
}

1 ответ

Решение

В C++ строковые литералы, такие как "Bookkepper" (так) являются const указатели на символы , это немного строже, чем в C. Так и должно быть:

const char *outer = "Bookkeeper"; // Note also spelling

скорее, чем:

char outer = "Bookkepper";

Кроме того, вы не включаете типы при вызове функции, поэтому:

word = Subtract(const char &outer, const char &inner);

будет лучше как:

word = Subtract(outer, inner);

Отдельно (и это только рекомендации по стилю), правильный тип для вещей, которые представляют размеры (например, количество символов в строке) size_t скорее, чем int,

И обычно считается хорошей формой явно очистить всю динамическую память, прежде чем вернуться из main() Вы могли бы поставить:

delete[] word;
Другие вопросы по тегам