|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Некорректно ищет слово с найбольшим количеством гласных букв. Что неправильно? |
|
|
C/C++ - Некорректно ищет слово с найбольшим количеством гласных букв. Что неправильно?
|
|
Новый участник Сообщения: 14 |
Некорректно ищет слово с наибольшим количеством гласных букв. Что неправильно? Напишите правильный вариант.
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<locale.h>
int main(void)
{
setlocale (LC_ALL, "Rus");
char x[100], *p;
int i,d=0,k=1,sum;
printf("Введите текст : ",x);
strset (x,'\0');
scanf("%[^\n]%*c", x);
//Вывод количества слов
for (i=0; x[i]!='\0'; i++) d++;
for (i=1; i<d; i++) if (x[i]==' ' && x[i+1]!=' ') k++;
printf("Количество слов = %d",k);
printf("\n");
//Вывод слова с наибольшим количеством гласных букв
printf("Слово(а) с наибольшим количеством гласных букв : ");
for (i=0; x[i]!='\0'; i++)
{
if((*p=='e')||(*p=='u')||(*p=='i')||(*p=='o')||(*p=='a'))
sum+=*p;
if(sum>=sum)
printf("%s", p);
}
//Удаляет лишние пробелы
printf("\n");
printf("Отредактированый текст : ");
for(p = strtok(x, " "); p; p =strtok(NULL, " "))
printf("%s ", p);
getch();
return 0;
}
|
|
|
Отправлено: 16:31, 11-11-2012 |
|
Новый участник Сообщения: 29
|
Профиль | Отправить PM | Цитировать Можно так попробовать
#include<cstring>
#include<iostream>
using namespace std;
void check_word(char *f, int &a){
char sd[]="aeiouAEIOU";
while(*f){
for(int i=0;i<10;i++)
if(*f==sd[i]) a++;
f++;}}
int main()
{setlocale(0,"rus");
int b=0,a=0,c=0;
char ch[500],*p,buf[78],res[78];
cout<<"\t\t\tВведите строку "<<endl;
gets(ch);
cout<<"\n";
for(p=strtok(ch," ");p!=NULL;p=strtok(NULL," ")){
strcpy(buf,p);
check_word(buf,a);
if(b<a){
b=a;
strcpy(res,buf);}
for(int i=0;i<strlen(buf);i++){
if(buf[i]!=' ')
cout<<buf[i];
else
break;}
cout<<" длина слова "<<strlen(buf)<<" количиство гласных "<<a<<endl;
a=0;c++;
cout<<"\n----------------------------------------------------\n";
}
cout<<"Самое большее количество гластных "<<b<<" содержит слово "<<res<<" всего количиство слов "<<c<<endl;
cin.get();
cin.get();
return 0;}
|
|
Отправлено: 23:49, 11-11-2012 | #2 |
|
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Вариант с STL:
// я заметил что вы лепите все примеры в одну функцию - ОТВЫКАЙТЕ!
// тем самым вы усложняете себе понимание, а компилятору - работу
// будем считать что слово состоит только из букв
bool is_ru_alpha(int c) {
// кодировка win-1251
return unsigned(c - 'А') <= 63;
}
bool skipNotWord(streambuf& stm) {
do {
if (is_ru_alpha(stm.sgetc())) return true;
} while(0<=stm.sbumpc());
return false;
}
void getWord(streambuf& stm, string& output) {
output.clear();
while(is_ru_alpha(stm.sgetc()) {
output.push_back(char(stm.sbumpc()));
}
}
inline bool isVocal(const char& c) {
// а можно и таблично сделать
return c=='а' || c=='о' || c=='у' || c=='ы' || c=='и';
}
int main() {
streambuf* input = cin.rdbuf();
if (input) {
string word, max_word;
unsigned count, max_count=0;
while(skipNotWord(*input)) {
getWord(*input, word);
count = count_if(word.begin(), word.end(), isVocal);
if (max_count < count) {
max_count = count;
max_word = word;
}
}
}
if (max_count) {
cout << "found '" << max_word <<"' of " << max_count << " vocals" << endl;
} else {
cout << "not found word of vocals" << end;
}
}
|
|
Отправлено: 21:45, 19-11-2012 | #3 |
|
|
Участник сейчас на форуме |
|
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
| Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
| Разное - Указание слова в файле с максимальной долей гласных | Hardip | Программирование и базы данных | 0 | 04-12-2010 12:41 | |
| Рецепт ухи с минимальным количеством рыбы | Kaban-keb | Флейм | 4 | 03-08-2010 15:23 | |
| Все знают про обьеденение строк ('слово'&'еще слово'), а есть ли способ исключениеня? | tweakos | AutoIt | 3 | 15-07-2009 09:52 | |
| как удалить папку с количеством файлов ,превыщающих 10 млн | illusionmgs | Хочу все знать | 15 | 28-04-2009 19:53 | |
| [решено] Лицензирование организации с количеством ПК больше 250 | Sanau | Лицензирование продуктов Microsoft | 6 | 23-03-2007 18:31 | |
|