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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2014, 15:08   #1
MixaelMitre
 
Регистрация: 19.10.2014
Сообщений: 5
По умолчанию Работа со словами с++

Доброго времени суток!
Собственно начну с задания: Разработать программу, определяющую во введенном тексте на английском языке слово, в котором доля гласных (a, e, i, o, u, y) максимальна.

а вот примерный код (не работающий )

Код:
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
void main()
{
char string[256];
char st[60];
char maxstr[60];
char *blank="";
double k=0.0;
strcpy(st,blank);
strcpy(maxstr,blank);
 
printf("Vvedite stroku:");
gets(string);
strcat(string," ");
 
for (int i=0;i < strlen(string);i++)
if (string[i] == ' ' && strlen(st) != 0)
{
int count = 0;
for (int j=0;j < strlen(st);j++)
if (st[j] == 'a' || st[j] == 'e' || st[j] == 'i' || st[j] == 'o' || st[j] == 'u' || st[j] == 'y')
{
count++;
}
 
double l = (double)count/strlen(st);
if (l > k)
{
k=l;
strcpy(maxstr,st);
}
strcpy(st,blank);
} else
if (string[i] != ' ')
{
char *ch;
strcpy(ch, string+i);
ch[1] = '\0';
strcat(st,ch);
}
printf("Slovo s maximalnim kol-vom glasnih: %s\n",maxstr);
getch();
}
Помогите разобраться где тут ошибка и что добавить для выполнения тех задания (я так понимаю доли = кол-во гласных/размер слова)
MixaelMitre вне форума Ответить с цитированием
Старый 02.01.2015, 18:56   #2
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

Код:
#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;
const int n = 85;
int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "Rus");
	char s[n], res[n];
	int k = 0, count = 0, x = 0;
	cout << "Введите строку: ";
	gets(s);
	for(char *p = strtok(s, " "); p; p = strtok(NULL, " "))
	{
		for(int i = 0; i < strlen(p); i++)
		{
			if(p[i] ==  'a' || p[i] == 'e' || p[i] == 'i' || p[i] == 'o' || p[i] == 'u' || p[i] == 'y')
				k = 1;
		}
		if(k)
		{
			x = 1;
			if(strlen(p) > count)
			{
				count = strlen(p);
				strcpy(res, p);
			}
		}
	}
	if(!x)
		cout << "\nТаких слов нет!";
	else
		cout << "\nСлово в котором доля гласных максимальна: " << res;
	getch();
	return 0;
}
помог - жми на весы
Chainik! вне форума Ответить с цитированием
Старый 05.01.2015, 15:29   #3
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

Цитата:
Сообщение от MixaelMitre Посмотреть сообщение
Доброго времени суток!
Собственно начну с задания: Разработать программу, определяющую во введенном тексте на английском языке слово, в котором доля гласных (a, e, i, o, u, y) максимальна.
Код:
#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;
const int n = 85;
int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "Rus");
	char s[n], res[n];
	int count = 0, max = 0;
	bool found = 0;
	cout << "Введите строку: ";
	gets(s);
	for(char * p = strtok(s, " "); p; p = strtok(NULL, " "))
	{
		found = false; count = 0;
		for(int i = 0; i < strlen(p); i++)
		{
			if((p[i] ==  'a') || (p[i] == 'e') || (p[i] == 'i') || (p[i] == 'o') || (p[i] == 'u') || (p[i] == 'y'))
			{
				found = true;
				count++;
			}
		}
		if(found)
		{
			if(count > max)
			{
				max = count;
				strcpy(res,p);
			}
		}
	}
	cout << "\n\nСлово, в котором доля гласных букв максимальна: " << res;
	getch();
	return 0;
}
помог - жми на весы
Chainik! вне форума Ответить с цитированием
Старый 06.01.2015, 02:33   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Код:
#include <iostream>
#include <algorithm>
#include <sstream>
#include <iterator>

using namespace std;

int main() {

	string str;
	getline(cin, str);

	cout << *max_element(istream_iterator<string>(*(new stringstream(str))), istream_iterator<string>(),
			[](const string &lh, const string &rh) {
				auto vowels_count = [] (const string &str) {
					return count_if(str.begin(), str.end(),
						[](const string::value_type &c) {
							const string vowels = "aeiouy";
							return find(vowels.begin(), vowels.end(), c) != vowels.end();
						}
					);
				};
				return vowels_count(lh) < vowels_count(rh);
			}
	) << endl;
}
http://ideone.com/loFWO9
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со словами в Си. yura1234 Общие вопросы C/C++ 2 12.05.2014 19:51
Работа со словами в строке Максикок C++ Builder 1 21.02.2011 11:16
С. Работа со словами в строке radion_80 Помощь студентам 4 01.12.2009 15:35
Работа со словами Maxs Microsoft Office Word 4 05.10.2009 14:14
C++. Работа со строками и словами new programmer Помощь студентам 1 27.08.2009 16:36