2015-06-09 2 views
1

Это ссылка на следующий ответ Synxis.Ошибка при печати всех подстрок строки

https://codereview.stackexchange.com/questions/18684/find-all-substrings-interview-query-in-c/18715#18715

Предположим, я должен напечатать все подстроки строки «АРОБ». Чтобы сделать это, я должен вызвать метод как это:

findAllSubstrings2("cbaa"); 

Если взять строку из пользователя и выполните следующие действия:

string s; 
cin>>s; 
findAllSubstrings2(s); 

это дает следующее сообщение об ошибке:

[Error] cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'void findAllSubstrings2(const char*)' 

Почему это происходит?

+2

Вы используете 'string', и функция принимает массив' char'. Измените строку 's' на 'char [] s'. –

+0

Но когда я набираю findAllSubstrings2 («cbaa»), я передал строковый аргумент, и функция работает правильно для этого. – Shubham

ответ

2

В сообщении об ошибке говорит параметр функции findAllSubstrings2 объявлен как имеющий тип const char * в то время как вы пытаетесь передать аргумент типа std::string

string s; 
//... 
findAllSubstrings2(s); 

Вы должны использовать функцию-член c_str или data (начиная с C++ 11) класса std::string. Например,

findAllSubstrings2(s.c_str()); 
+0

s.c_str() работал. Но можете ли вы сказать мне, почему findAllSubstrings2 («cbaa») работал? – Shubham

+0

@Shubham Bhattar Строковые литералы имеют типы постоянных массивов символов в C++. Когда они передаются по значению, как в вашем примере, к функции, они преобразуются в указатели к их первым символам и имеют тип const char *. Таким образом, нет проблем с вызовом вашей функции со строковым литералом. –

+0

Хорошо. Благодарю. – Shubham

1

вы используете строку, в функции char используется символ char [] s;

+0

Да, я попытался преобразовать строку в массив символов, и она сработала. Но я беспокоюсь, когда я явно передаю строковый аргумент, его работу и когда я передаю строковую переменную, он дает ошибку. – Shubham

+0

просто использовать в 'function findAllSubstrings2 (s.c_str()); 'then –

1

использование c_str() method в строке класса при переходе аргумента

string s; 
cin>>s; 
findAllSubstrings2(s.c_str()); 
0

Возможно, вы должны изменить тип параметра функции. Somethink like:

void findAllSubstrings2(string s){ 
//... function implementation... 
} 
Смежные вопросы