Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Некорректно ищет слово с найбольшим количеством гласных букв. Что неправильно? (http://forum.oszone.net/showthread.php?t=246705)

pashazt 11-11-2012 16:31 2023523

Некорректно ищет слово с найбольшим количеством гласных букв. Что неправильно?
 
Некорректно ищет слово с наибольшим количеством гласных букв. Что неправильно? Напишите правильный вариант.
Код:

#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;
}


vea180 11-11-2012 23:49 2023795

Можно так попробовать
Код:

#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;}


pva 19-11-2012 21:45 2028542

Вариант с 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.

Время: 09:44.
© OSzone.net 2001-