Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задачка про три "е". Работа со строками в С++, Помогите разобраться с задачей.  
:(
    Опции темы
iDeus
Дата 15.10.2008, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Deus vult
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 5.6.2008
Где: Vladivostok

Репутация: нет
Всего: нет



Уважаемые программисты, помогите разобраться с задачкой:

Во введенном тексте подсчитать количество слов, содержащих тру буквы 'е'. Слова разделены пробелами. 

Вот что у меня получилось:

Код

#include<stdio.h>
#include<iostream.h>
void main()
{
  char str[518];
  cout<<"Ведите строку русского текста и нажмите Enter"<<endl;
  cin.getline(str,sizeof(str));
  int eee=0; //счетчик слов с тремя "е"
  int e=0; //счетчик "е"
  int i;
  for(i=0; str[i]!='\0'; i++)
    {
      do
        {
          if(str[i]=='е'||str[i]=='Е'||str[i]=='e'||str[i]=='E') e++;
        }
      while(str[i]!=' ');
      if(e==2) eee++;
      e=0;
    }
  cout<<"Количество слов с тремя 'е' равно "<<eee<<endl;
}


Программа не выходит из цикла. Предложите свой вариант решения. 
PM MAIL ICQ Skype GTalk   Вверх
DjoNIK
Дата 15.10.2008, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 1
Всего: 5



Ну так правильно, ты в цикл 
Код

      do
        {
          if(str[i]=='е'||str[i]=='Е'||str[i]=='e'||str[i]=='E') e++;
        }
      while(str[i]!=' ');

попадаешь, допустим, с символом 'q', проверяешь его, что это не пробел, не меняя индекс проверяешь бесконечно один и тот же символ.


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
iDeus
Дата 15.10.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Deus vult
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 5.6.2008
Где: Vladivostok

Репутация: нет
Всего: нет



А если во так:

Код

#include<stdio.h>
#include<iostream.h>
void main()
{
  char str[518];
  cout<<"Ведите строку русского текста и нажмите Enter"<<endl;
  cin.getline(str,sizeof(str));
  int eee=0; //счетчик слов с тремя "е"
  int e=0; //счетчик "е"
  int i,j;
  for(i=0; str[i]!='\0'; i++)
    { 
      for(j=i; str[j]!=' ';j++)
        {     
          if(str[i]=='е'||str[i]=='Е'||str[i]=='e'||str[i]=='E') e++;
        }
      if(e==2) eee++;
    }
  cout<<"Количество слов с тремя 'е' равно "<<eee<<endl;
}


Прорабатывает, но выдает неверный ответ. Т.е. при вводе слова с тремя "е" она все равно пишет "Количество слов с тремя 'е' равно 0"

В чем может быть проблема?

Это сообщение отредактировал(а) iDeus - 15.10.2008, 12:28
PM MAIL ICQ Skype GTalk   Вверх
DjoNIK
Дата 15.10.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 1
Всего: 5



Цитата(iDeus @  15.10.2008,  12:23 Найти цитируемый пост)
В чем может быть проблема? 

Проблема в том, что не нужно угадывать, а сесть и подумать smile
Код

      for(j=i; str[j]!=' ';j++)
        {     
          if(str[i]=='е'||str[i]=='Е'||str[i]=='e'||str[i]=='E') e++;
        }

Инкрементируешь j, а сравниваешь i-ый символ (то есть все время один и тот же).


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Dmi3ev
Дата 15.10.2008, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Код

#include <iostream.h>
#include <stdio.h>
int main()
{
char str[200];
int e=0;
int eee=0;
cout<<"Enter string:"<<endl;
cin.getline(str, sizeof(str));
for (int i=0; ;i++)
 {
  if (str[i]=='\0')
   break;
  if (str[i]=='e')
   e++;
  if (str[i]==' ')
   e=0;
  if (e==3)
   eee++;
 }
cout<<endl<<eee;
eee=0;
e=0;
return 0;
}

вот так можно, писал прям тут, но вроде все норамльно


--------------------

PM MAIL   Вверх
mrbrooks
Дата 15.10.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Могу предположить что слово с "русским текстом" введенное с клавы, есть полнейшая дичь.

iDeus, у тебя все нормально отображается. Никаких проблем с кодировками нет? Какой компилер? 
PM MAIL   Вверх
DjoNIK
Дата 15.10.2008, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 1
Всего: 5



А пчему вместо
Код

for (int i=0; ;i++)
 {
  if (str[i]=='\0')
   break;
  if (str[i]=='e')
   e++;
  if (str[i]==' ')
   e=0;
...

не написать
Код

for (int i=0; str[i]!='\0';i++)
 {
  if (str[i]=='e')
   e++;
  else if (str[i]==' ')
   e=0;
...


Это сообщение отредактировал(а) DjoNIK - 15.10.2008, 12:55


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
iDeus
Дата 15.10.2008, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Deus vult
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 5.6.2008
Где: Vladivostok

Репутация: нет
Всего: нет



Dmi3ev, спасибо большое, все работет, только везде не e=0, а e=1. (индыксы с нуля же, тогда должно было быть 4 "е")

Dmi3ev,  DjoNIK, спасибо за помощь, вы мне очень помогли. 


PM MAIL ICQ Skype GTalk   Вверх
mrbrooks
Дата 15.10.2008, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



DjoNIK, для оптимизации можно вообще тогда через указатель объявить str и
Код

while(*str)
{
str++;
}

кстати и экономия вместо 200 байт всего 4  smile 
PM MAIL   Вверх
iDeus
Дата 15.10.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Deus vult
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 5.6.2008
Где: Vladivostok

Репутация: нет
Всего: нет



Цитата(mrbrooks @ 15.10.2008,  13:00)
DjoNIK, для оптимизации можно вообще тогда через указатель объявить str и
Код

while(*str)
{
str++;
}

кстати и экономия вместо 200 байт всего 4  smile

В таком случае, как это будет выглядеть?
PM MAIL ICQ Skype GTalk   Вверх
DjoNIK
Дата 15.10.2008, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 1
Всего: 5



Цитата(iDeus @  15.10.2008,  13:06 Найти цитируемый пост)
В таком случае, как это будет выглядеть? 


Код

while(*str)
{
  if (*str=='e')
   e++;
  else if (*str==' ')
   e=0;
  if (e==3)
   eee++;
str++;
}




--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
iDeus
Дата 15.10.2008, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Deus vult
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 5.6.2008
Где: Vladivostok

Репутация: нет
Всего: нет



Цитата(DjoNIK @ 15.10.2008,  13:08)
Цитата(iDeus @  15.10.2008,  13:06 Найти цитируемый пост)
В таком случае, как это будет выглядеть? 


Код

while(*str)
{
  if (*str=='e')
   e++;
  else if (*str==' ')
   e=0;
  if (e==3)
   eee++;
str++;
}

компилятор выдает "error C2105: '++' needs l-value" В девятой строке "str++;"

Это сообщение отредактировал(а) iDeus - 15.10.2008, 13:15
PM MAIL ICQ Skype GTalk   Вверх
DjoNIK
Дата 15.10.2008, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 1
Всего: 5



Код

char strArray[200];
char* str = strArray;
//...
while(*str)
{
  if (*str=='e')
   e++;
  else if (*str==' ')
   e=0;
  if (e==3)
   eee++;
str++;
}



--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
mrbrooks
Дата 15.10.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



iDeus, 
Цитата(mrbrooks @  15.10.2008,  13:00 Найти цитируемый пост)
для оптимизации можно вообще тогда через указатель объявить str


PM MAIL   Вверх
Dmi3ev
Дата 15.10.2008, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Код

#include <iostream.h>
#include <stdio.h>
int main()
{
char str[200];
int e=0;
int eee=0;
cout<<"Enter string:"<<endl;
cin.getline(str, sizeof(str));
for (int i=0; ;i++)
 {
  if (str[i]=='\0')
   break;
  if (str[i]=='e')
   e++;
  if (str[i]==' ')
   e=0;
  if (e==3)
   eee++;
 }
cout<<endl<<eee;
eee=0;
e=0;
return 0;
}



--------------------

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.