Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2010, 00:43   #1
ЩАС
 
Регистрация: 15.12.2010
Сообщений: 3
По умолчанию с++ строки.

Дана строка текста, в которой слова разделены пробелами и запятыми. Необходимо:
а) определить количество слов в строке, заканчивающихся на гласную букву;
б) найти среднюю длину слов в строке и вывести все слова, имеющие такую длину, или сообщение "Слов длиной n символов в строке нет";
в) вывести каждое пятое слово.
Первые два задания я сделал, но 3 не получается. помогите. Найдите ошибки пожалуйста.
#include<stdio.h>
#include<iostream.h>
#include<math.h>
#include<string.h>
void main ()
{
int w,q,h,c,k,j,n;
char s[]="So she was considering in her own mind, as well as she could, for the hot day made her feel very sleepy and stupid, whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her.";
char s2[20][10];
w=0;
c=0;
h=0;
n=0;
k=0;
j=0;
for(q=0;q<300;q++)
{
if((s[q]==' ')&&((s[q-1]=='a')||(s[q-1]=='e')||(s[q-1]=='y')||(s[q-1]=='u')||(s[q-1]=='i')||(s[q-1]=='o'))) w++;
}
printf("V stroke:\n");
puts(s);
printf("%3i",w);
printf(" slov zakanchivayushchihsya na glasnuyu bukvu\n");
for (q=0;q<300;q++)
{
if(s[q]!='\0') h++;
}

for (q=0;q<h;q++)
{
if ((s[q]!=' ')&&(s[q]!=',')&&(s[q]!='.')) {k++;}
if (s[q]==' ') n++;
c=k/(n+1);
if ((s[5]==' ')||(s[q]==' ')&&((s[q+5]==' ')||(s[q+5]==',')||(s[q+5]=='.'))) cout<<s[q]<< s[q+1] << s[q+2] << s[q+3] << s[q+4];
}
printf("%3i",k);
printf("%2i", n);// вот до этого всё работает.

for (q=0;q<h;q++)
{

if ((s[q]!=' ') && (s[q]!='.'))
s2[c][j++]=s[q++];
else c++;
cout<<c;
}
for (q=0;q<c;q++)
{

if (fmod(c,5)==0) cout<<s2[c][j];
}

}
ЩАС вне форума Ответить с цитированием
Старый 27.12.2010, 11:40   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Переменные c,j не забывай инициализировать. И в конце каждого слова нулевой символ, чтобы cout понял где конец слова.

Код:
c = 0;j=0;
for (q=0;q<h;q++)
{
 if ((s[q]!=' ') && (s[q]!='.')) 
  s2[c][j++]=s[q];
 else 
  {s2[c][j]=0;c++;j=0;cout<<c<<" ";}
}

for (q=0;q<c;q++)
{ 
if (fmod(c,5)==0) cout<<s2[c];
}
}
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 27.12.2010, 12:06   #3
ЩАС
 
Регистрация: 15.12.2010
Сообщений: 3
По умолчанию

Спасибо, но у меня при выводе с выдают числа от 1 до 42. А надо вывести каждое пятое слово, где я пытаюсь это сделать при выводе s2[c].
ЩАС вне форума Ответить с цитированием
Старый 27.12.2010, 23:46   #4
ЩАС
 
Регистрация: 15.12.2010
Сообщений: 3
По умолчанию

теперь у меня выводит слова со 2-го слова, но каждое пятое. И ставит много ненужных символов перед каждым словом. Подскажите что делать.
for (q=0;q<h;q++)
{
if ((s[q]!=' ') && (s[q]!='.'))
s2[c][j++]=s[q];
else
{s2[c++][j]=0;j=0;}
}

for (c=0;c<60;c++)
{
for(j=0;j<10;j++)
{
if (fmod(c,5)==0) cout<<s2[c][j];
}
}
}

Последний раз редактировалось ЩАС; 27.12.2010 в 23:50.
ЩАС вне форума Ответить с цитированием
Старый 28.12.2010, 10:48   #5
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

На.. разбирайся
Код:
#include <iostream.h>
#include <math.h>
int main(void)
{
 int c,q,j;
 char s[]="So she was considering in her own mind, as well as she could, for the hot day made her feel very sleepy and stupid, whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink eyes ran close by her.";
 char s2[128][16];

 c=0;j=0;
 for (q=0;s[q]!='.';q++)
 {
  if ((s[q]!=' ') && (s[q]!=','))
   s2[c][j++]=s[q];
  else if (j!=0) {s2[c][j]=0;c++;j=0;}
 }
 if (j!=0){s2[c][j]=0;c++;} // last word

 for (q=0;q<c;q++)
 {
  if (fmod(q+1,5)==0) cout<<s2[q]<<" ";
 }
 return 0;
}
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если совпадающих подстрок нет, Шпунюся Помощь студентам 1 16.12.2010 21:02
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Дбавление новой строки, после строки с подходящими параметрами RailOS Microsoft Office Excel 5 18.08.2010 10:12
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10