Форум программистов, компьютерный форум CyberForum.ru

Цикл с указателем - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
15.12.2011, 12:06     Цикл с указателем #1
Программу, которая проверяет, сколько раз в строку входит знак ? нужно из такой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
using namespace std;
 
int main ()
{
    const int max_length = 1001;
    int quest_count = 0;
 
    char str[max_length];
    cout << "Enter a string (max length " << max_length - 1 << " symbols)\n";
    cin.getline (str, max_length);
 
    for (int i = 0; str[i] !=0; i++)
        if (str[i] == '?') quest_count++;
        cout << "quest_count = " << quest_count << "\n";
 
    return 0;
}
переписать так, чтобы проверяемой величиной был указатель и условие цикла имело вид *р=='?'

При компиляции программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
using namespace std;
 
int main ()
{
    const int max_length = 1001;
    int quest_count = 0;
 
    char str[max_length];
    cout << "Enter a string (max length " << max_length - 1 << " symbols)\n";
    cin.getline (str, max_length);
 
    while (*str)
    {
        if (*str == '?') quest_count++;
        str++;
    }
 
    cout << "quest_count = " << quest_count << "\n";
 
    return 0;
}
в 17 строке выдается ошибка error C2105: '++' needs l-value.
Что не верно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2011, 12:06     Цикл с указателем
Посмотрите здесь:

C++ функция с указателем
C++ Работа с указателем.
C++ калькулятор с указателем
C++ Работа с указателем
C++ функция с указателем
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.12.2011, 12:10     Цикл с указателем #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
using namespace std;
 
int main ()
{
        const int max_length = 1001;
        int quest_count = 0;
 
        char str[max_length];
        cout << "Enter a string (max length " << max_length - 1 << " symbols)\n";
        cin.getline (str, max_length);
 
        for (char p=str; *p!=(char)0; ++p)
        {
                if (*p == '?')
                {
                  ++quest_count;
                }
                cout << "quest_count = " << quest_count << "\n";
        }
        return 0;
}
Добавлено через 1 минуту
Всегда выделяй ветви по ифу с элзом и тела циклов операторными скобками на случай, если потом понадобиться прикрутить вторую операцию в ту же ветвь, или цикл.
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
15.12.2011, 12:16  [ТС]     Цикл с указателем #3
Забыла сказать, переправленная программа должна быть с циклом while.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.12.2011, 12:18     Цикл с указателем #4
Цитата Сообщение от Heidel Посмотреть сообщение
ыдается ошибка error C2105: '++' needs l-value.
str - массив. И хотя реализован он указателем, но в общем случае операторы не обязаны об этом догадываться. Например, sizeof вместо указателя измеряет кусок памяти по адресу в этом указателе, а если объявить явный указатель - то самого указателя. Остальные операторы всё таки в курсе реализации массива, да вот беда - указатель то константный, -- и ++, с ним не совсем не работают, а +=, -= и = не принимают его за левый операнд.

Добавлено через 2 минуты
Я забыл перед p поставить *.
Цитата Сообщение от Heidel Посмотреть сообщение
Забыла сказать, переправленная программа должна быть с циклом while.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <string>
using namespace std;
 
int main ()
{
        const int max_length = 1001;
        int quest_count = 0;
        char *p;
        char str[max_length];
        cout << "Enter a string (max length " << max_length - 1 << " symbols)\n";
        cin.getline (str, max_length);
 
        p=str;
        while (*p!=(char)0)
        {
                if (*p == '?')
                {
                  ++quest_count;
                }
                ++p;                  
        }
        cout << "quest_count = " << quest_count << "\n";
        return 0;
}
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
15.12.2011, 13:12  [ТС]     Цикл с указателем #5
То есть, строка
C++
1
p=str;
говорит о том, что p, указатель на элемент типа сhar, ссылается на первый элемент массива str?
Лжец
 Аватар для Лжец
31 / 31 / 3
Регистрация: 13.12.2011
Сообщений: 106
15.12.2011, 13:21     Цикл с указателем #6
Цитата Сообщение от Heidel Посмотреть сообщение
говорит о том, что p, указатель на элемент типа сhar, ссылается на первый элемент массива str?
Почти, p - получает адрес первого элемента массива str. А дальше прыгает по нему, см. адресная арифметика.
Heidel
 Аватар для Heidel
110 / 110 / 7
Регистрация: 11.10.2011
Сообщений: 647
19.12.2011, 08:34  [ТС]     Цикл с указателем #7
Можно уточнить?
То есть, получается, что в данном случае p=p+1 это на самом деле p+sizeof(char), я правильно понимаю?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2011, 10:18     Цикл с указателем
Еще ссылки по теме:

C++ Переделать функцию c указателем на int, на функцию с указателем на void
В чем разница между указателем и указателем на указатель? C++
Непоняток с указателем C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
19.12.2011, 10:18     Цикл с указателем #8
Цитата Сообщение от Heidel Посмотреть сообщение
if (str[i] == '?')
C
1
if ( *( str + i ) == '?' )
Добавлено через 47 секунд
Цитата Сообщение от Heidel Посмотреть сообщение
sizeof(char)
А он всегда равен едины, плюс ко всему он здесь не причем.

Добавлено через 1 минуту
Цитата Сообщение от Heidel Посмотреть сообщение
говорит о том, что p, указатель на элемент типа сhar, ссылается на первый элемент массива str?
Это говорит о том, что p присваивается адрес, который хранится в str (str это тоже указатель)
Yandex
Объявления
19.12.2011, 10:18     Цикл с указателем
Ответ Создать тему
Опции темы

Текущее время: 16:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru