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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2011, 12:31   #1
Demit
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 13
По умолчанию строки

помогите решить на языке Си: Дана строка. Найти символ в строке, встречающийся наибольшее число раз.
Вот программа, написаная мною...но она выводит не такой результат, который надо!
#pragma argsused
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(int argc, char* argv[])
{
int max=0,n,i,j;
char str[256],maxs,s;
printf("Input string-");
gets(str);
for (i=0;str[i]!=0;i++){
s=str[i];

for(j=i;str[j]!=0;j++){
if(s=str[j]) {n=n+1;}
}
if (max<n) {max=n;maxs=str[i];}
}

printf("%c",maxs);

getch();
return 0;
}
помогите найти ошибку и доделать программу!
Demit вне форума Ответить с цитированием
Старый 03.11.2011, 13:04   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
if(s=str[j])
Типичный ляп. "=" - это присваивание.

Кроме того, значение n изначально произвольно (скажем, -327). Потом к нему прибавляются единички, получаются другие произвольные значения.
Abstraction вне форума Ответить с цитированием
Старый 03.11.2011, 13:58   #3
Demit
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 13
По умолчанию

я думаю, что эту программу нужно реализовать так: допустим вводим символы - а в а в с с с...
Потом проверяем количество каждого символа....(как бы считаем).
И в конце выводим наиболее встречающийся символ!

Помогите написать код программы!

Последний раз редактировалось Demit; 03.11.2011 в 14:00.
Demit вне форума Ответить с цитированием
Старый 03.11.2011, 14:03   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Долго думал. Несмотря на то, что текст выше не оформлен тегом CODE, это вполне себе код программы, содержащий два ляпа. За вычетом их, и в предположении, что пользователь не введёт нам строку в мегабайт, это вполне себе способ решения задачи, пусть и не оптимальный по времени.
Abstraction вне форума Ответить с цитированием
Старый 03.11.2011, 14:07   #5
Demit
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 13
По умолчанию

а можете написать,что именно в программе нужно поменять?
Demit вне форума Ответить с цитированием
Старый 03.11.2011, 14:17   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Код:
if(s=str[j])
Типичный ляп. "=" - это присваивание.

Кроме того, значение n изначально произвольно (скажем, -327). Потом к нему прибавляются единички, получаются другие произвольные значения.
Наверное, нужно сделать сравнение вместо присваивания и подумать, чему в каких точках программы должно быть равно значение n.
Первый пункт понятен? Если нет, посмотрите справку по операторам C++, это в чистом виде вопрос синтаксиса.
Второй пункт понятен? Если нет, напишите комментарии к программе, уделяя особое внимание логике подсчёта символов.
Abstraction вне форума Ответить с цитированием
Старый 03.11.2011, 17:00   #7
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
for(j=i;str[j]!=0;j++){
if(s=str[j]) {n=n+1;}
}
замени на
Код:
for(j=i,n=0;str[j]!=0;j++){
if(s==str[j]) {n=n+1;}
}
не проверял, но вроде бы должно работать
rrrFer вне форума Ответить с цитированием
Старый 07.11.2011, 20:35   #8
Demit
Пользователь
 
Регистрация: 03.11.2011
Сообщений: 13
По умолчанию

в строке "str[j]!=0" выкидывает ошибку! значит что-то не так !!!
помогите найти ошибки!!!
Demit вне форума Ответить с цитированием
Старый 07.11.2011, 20:42   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
в строке "str[j]!=0" выкидывает ошибку! значит что-то не так !!!
Значит, надо что-то сделать!!!

Кто выкидывает, какую ошибку?
Abstraction вне форума Ответить с цитированием
Старый 07.11.2011, 20:50   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
int main(int, char*) {
	int		max, n, i, j;
	char	str[256],
			maxs;

	printf("Input string-");
	gets( str );

	max = 0;
	for( i = 0; str[ i ]; i++ ) {
		n = 0;
		for( j = i; str[ j ]; j++ )
			n += str[ i ] == str[ j ];
		if( max < n ) {
			max = n; 
			maxs = str[ i ];
		}
	}

	printf( "%c", maxs );

	return 0;
}
вроде бы логику не правил, просто отформатировал. Но вроде бы работает верно.
rrrFer вне форума Ответить с цитированием
Ответ


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



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