Некорректно ищет слово с найбольшим количеством гласных букв. Что неправильно?
Некорректно ищет слово с наибольшим количеством гласных букв. Что неправильно? Напишите правильный вариант.
Код:
#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;
}
|
Можно так попробовать
Код:
#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;}
|
Вариант с 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;
}
}
|
Время: 09:44.
© OSzone.net 2001-