Немного запутался с типами при создании функции которая принимает строку в виде массива

119
28 апреля 2019, 19:00

Не могу понять где наапортачил. Только начал изучать С++ и предомной стоит такая задача, найти количество букы "а" в строке которая передаётся функции и вывести количество этих букв. Код значит выглядит вот так.

char str(char *str[]) {
    int j = 0;
    for (int i = 0; i < sizeof(str) / sizeof(*str); i++) {
        if (str[i] == "a") {
            j++;
        }
    }

    return j;
}

Вызов функции в main.
cout << str("saassssasasasass") << endl;

Так вот когда вызываю функцию, VS выдаёт вот такую ошибку. Вчём проблемма? И ещё вопрос зачем нужны звёздочки char *str[] и sizeof(str) / sizeof(*str)

Answer 1

Ошибка первая : в функцию передаёте строку, а принимаете как массив строк.

char str(char *str[]) {

надо так:

char str(char const * str) {

Ошибка вторая : вы сравниваете букву со строкой:

if (str[i] == "a") {

надо так:

if (str[i] == 'a') {

Код sizeof(str) / sizeof(*str) это кто-то что-то ляпнул. Хотели вычислить количество букв в зависимости от размера структуры и размера элементов.

for (int i = 0; i < sizeof(str) / sizeof(*str); i++) {

для строки нужно так:

for (int i = 0; i < strlen(str); i++) {
Answer 2
int str(const char *str) 
{
    int count = 0;
    for(; *str; str++) 
        if (*str == 'a') ++count;
    return count;
}
READ ALSO
Неясное поведение шаблонов

Неясное поведение шаблонов

Есть следующая шаблонная функция:

123
(C++) Как заблокировать перемещение мыши?

(C++) Как заблокировать перемещение мыши?

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

117