С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
#1

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

15.12.2011, 12:06. Просмотров 1746. Ответов 7
Метки нет (Все метки)

Программу, которая проверяет, сколько раз в строку входит знак ? нужно из такой
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.
Что не верно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2011, 12:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Цикл с указателем (C++):

В чем разница между указателем и указателем на указатель? - C++
int x, *p, *q; x=10; p=&amp;x; q=p; cout&lt;&lt;*q; int x, *p, **q; x=10; p=&amp;x; q=&amp;p;

Переделать функцию c указателем на int, на функцию с указателем на void - C++
Есть рабочий код qsort для int: void qsort(int *base, int n) { // Прекратить если количество элементов меньше либо равно единице....

Работа с указателем - C++
Есть такой указатель: char *s=&quot;n1=1&amp;n2=2&amp;name=test&amp;sername=test2&quot;; Нужно выделить с этой стоки значение name, то есть &quot;test&quot; и...

Непоняток с указателем - C++
Объясните пожалуйста надпись. Вот простенький пример. include &lt;iostream&gt; using namespace std; int cubeV (int *n) { *n = *n *...

Работа с указателем - C++
#include &lt;ntddk.h&gt; NTSTATUS PsLookupProcessByProcessId(__in HANDLE ProcessId, __out PEPROCESS *Process); static VOID...

Работа с указателем. - C++
Доброе время суток. При чтении из файла вроде все нормально, но когда я пытаюсь вручную установить указатель, в нужную позицию, и считать...

7
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
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 минуту
Всегда выделяй ветви по ифу с элзом и тела циклов операторными скобками на случай, если потом понадобиться прикрутить вторую операцию в ту же ветвь, или цикл.
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
15.12.2011, 12:16  [ТС] #3
Забыла сказать, переправленная программа должна быть с циклом while.
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
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;
}
1
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
15.12.2011, 13:12  [ТС] #5
То есть, строка
C++
1
p=str;
говорит о том, что p, указатель на элемент типа сhar, ссылается на первый элемент массива str?
0
Лжец
31 / 31 / 3
Регистрация: 13.12.2011
Сообщений: 106
15.12.2011, 13:21 #6
Цитата Сообщение от Heidel Посмотреть сообщение
говорит о том, что p, указатель на элемент типа сhar, ссылается на первый элемент массива str?
Почти, p - получает адрес первого элемента массива str. А дальше прыгает по нему, см. адресная арифметика.
1
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
19.12.2011, 08:34  [ТС] #7
Можно уточнить?
То есть, получается, что в данном случае p=p+1 это на самом деле p+sizeof(char), я правильно понимаю?
0
go
Эксперт С++
3586 / 1366 / 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 это тоже указатель)
0
19.12.2011, 10:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2011, 10:18
Привет! Вот еще темы с ответами:

функция с указателем - C++
Плз, помогите.... :wall::help: надо написать на языке С Написать и протестировать функцию STRP ( str1, str2), которая возвращает...

Массив с указателем - C++
при формировании выходной строки каждый символ должен дублироваться. Например дана abc, а при выходе aabbcc/ Все это должно быть...

Калькулятор с указателем - C++
Доброго всем времени суток! Вот наваял калькулятор,а вот как в нем можно использовать вместо переменных один указатель? Зараннее благодарен...

функция с указателем - C++
насколько я поняла, то нужно с помощью функции(при этом используя указатели) написать код, который заменяет строчные буквы на заглавные ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.