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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
#1

Разница циклов for и while - C++

30.05.2009, 04:05. Просмотров 2408. Ответов 7
Метки нет (Все метки)

Перепишите следующий пример с инструкцией for в виде эквивалентного кода с использованием инструкции while:
C++
1
2
for (i=0;i<max_length;i++)
    if (input_line[i]=='?') guest_count++;
Перепишите так,чтобы переменной цикла был указатель,то есть,чтобы проверка выглядела как-нибудь так: *p=='?'

Додумался только до этого:
C++
1
2
3
    char *p=input_line;
    while (*p++!='\0')
          if(*(p-1)=='?') ++guest_count;
1)То есть,мне пришлось объявить дополнительный указатель,так как инкремент на имя массива делать нельзя.Или всё-таки можно каким-то образом?Ведь имя массива-это указатель на его первый элемент,так что может быть как-то с помощью скобок или другим путём его можно инкрементировать?

2)С приоритетом операторов вроде бы ясно: *p++ -сначала инкрементируется указатель,потом разыменовывается и сравнивается с символом конца строки.Поэтому мне пришлось выполнить *(p-1) в следующей инструкции.Можно ли как-то укоротить код?Написать одной строкой,в-общем,чем короче,тем лучше в данном примере?
Можете отвечать 1 и 2 в разных сообщениях.Это важные вопросы,пожалуйста,не проходите мимо,если знаете!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2009, 04:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разница циклов for и while (C++):

Разница в работе циклов for и while - Pascal ABC
var n,k:integer; begin write('Введите натур число '); readln(n); k:=0; while exp(k*ln(2))&lt;=n do inc(k); write('Наименьшее...

Как получить сумму и произведение циклов с использованием одной строки циклов - Java SE
Как получить сумму и произведение циклов с использованием одной строки циклов, а не трёх?. class ForDrmo2 { public static...

Конструктор Циклов - C (СИ)
Помогите, пожалуйста, составить формулу в теле цикла (BorlandC 3.1): &quot;Определить ближайшее четное число больше заданного числа N, которое...

Счетчик циклов - C++
помогите найти ошибку: #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main(int argc, char**...

Распараллеливание циклов - C++
Возникли трудности с освоением OpenMP Непонимаю, почему если закоментировать вот этот фрагмент кода, то программа работает вы разы...

Счетчик циклов - Fortran
Здравствуйте, уважаемые форумчане. Вопрос может быть странный, но подскажите, пожалуйста, с примером где может использоваться счетчик...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
30.05.2009, 08:36 #2
Вообщето можно попробовать так:
C++
1
input_line[i]++;
1
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
30.05.2009, 08:39  [ТС] #3
Перепишите так,чтобы переменной цикла был указатель,то есть,чтобы проверка выглядела как-нибудь так: *p=='?'
Спасибо,конечно,но
input_line[i]++; - разве это указатель?.
0
rrrFer
Заблокирован
30.05.2009, 08:47 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main(){
    char *a=new char[255];
    cin>>a;
    int g=0;
    while(*a)
        g+=*(++a)=='?'?1:0;
    cout<<endl<<g<<endl;
    system("pause");
}
1
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
30.05.2009, 08:54  [ТС] #5
Хмм,выглядит неплохо.Но при выходе за пределы строки,есть ли гарантия того,что условие (*a) будет false?Что,если он будет указывать на мусор в памяти?Всмысле,не нужна ли тут проверка на выход за пределы массива?
0
rrrFer
Заблокирован
30.05.2009, 08:58 #6
Цитата Сообщение от #pragma Посмотреть сообщение
Хмм,выглядит неплохо.Но при выходе за пределы строки,есть ли гарантия того,что условие (*a) будет false?Что,если он будет указывать на мусор в памяти?
строка в конце бополняется символом с кодом 0, на это и проверка.
1
#pragma
Временно недоступен
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
30.05.2009, 09:08  [ТС] #7
Правда,тут сначала инкремент,то есть первый символ пропускается по-любому,но всё равно спасибо!
0
rrrFer
Заблокирован
30.05.2009, 09:15 #8
Цитата Сообщение от #pragma Посмотреть сообщение
Правда,тут сначала инкремент,то есть первый символ пропускается по-любому,но всё равно спасибо!
точно:
C++
1
while(*a) g+=*(a++)=='?';
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2009, 09:15
Привет! Вот еще темы с ответами:

Вложение циклов - C++
Объясните вложение циклов и привидите примерчик какой-нить...

Организация циклов в C++ - C++
Не могу никак справиться с этим заданием: Дано натуральное число N: опредилить наименьшую цифру с чётным номером Оч нужна помощь....

Выход с циклов - C#
Добрый день. Как можно выйти из такого цикла. Есть идея передать значение i через глобальную переменную какую нибудь. А другие...

Различие циклов - C++
Подскажите, пожалуйста. Приведенные циклы работают одинаково? for(int x : group.g_players) { player.groupID = 0; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.05.2009, 09:15
Ответ Создать тему
Опции темы

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