Помогите пожалуйста описать алгоритм, а то не знаю даже с чего начать, чтобы все условия задания были выполнены
вот задание
это как бы напутствие
Вариант задания реализовать в виде функции, использующей для работы со строкой и матрицами только указатели и операции вида *P++, P++ итд Если функция возвращает строку или ее фрагмент, то это также необходимо сделать через указатель. Строки и матрицы динамические, размер вводится с клавиатуры. Числовые значения считать целыми. Инициализацию матриц реализовать через датчик случайных чисел или ввод с клавиатуры. Строки вводить с клавиатуры. Результат программы записать в файл.
Выполнить следующее задания, не используя стандартные операции и процедуры для строк и символов
Написать функцию, которая для каждого символа заданного текста выводит, сколько раз он встречается в тексте. Сообщение об одном символе должно печататься не более одного раза.
вот задание
это как бы напутствие
Вариант задания реализовать в виде функции, использующей для работы со строкой и матрицами только указатели и операции вида *P++, P++ итд Если функция возвращает строку или ее фрагмент, то это также необходимо сделать через указатель. Строки и матрицы динамические, размер вводится с клавиатуры. Числовые значения считать целыми. Инициализацию матриц реализовать через датчик случайных чисел или ввод с клавиатуры. Строки вводить с клавиатуры. Результат программы записать в файл.
Выполнить следующее задания, не используя стандартные операции и процедуры для строк и символов
Написать функцию, которая для каждого символа заданного текста выводит, сколько раз он встречается в тексте. Сообщение об одном символе должно печататься не более одного раза.
-
-
07.01.2010 в 20:44проходишь по массиву и на каждый символ инкрементируешь соответствующий элемент массива на 1. потом делаешь выхлоп. мысль ясна?
-
-
07.01.2010 в 21:24берем символ из текста, проверяем есть ли он в массиве, если есть добавляем счетчик единицу, если нет
добавляем символ в конец массива счетчик 1
далее в файл, символ - кол-во
а есть еще как вариант
берем символ узнаем его анси код, он ведь в пределах 256, и забиваем его в массив номером его кода
к примеру? символ А , код 14
забиваем в массив masiv[14]
далее если его встречаем дабавим счетчик 1
так можно???
указатели чутка проблемно, может сначала без них наваять, а потом будет не так сложно подправить???
-
-
07.01.2010 в 21:28это как??
на заочке учусь, особо и спрасить не укого..
раньше на delphi, всяк мелочи писал для себя..
-
-
07.01.2010 в 21:32если не юникод, то 256 символов хватит для большинства кодировок
идея такая, что ты в массив записываешь количество повторений каждого символа.
char *myString;
int numOccur[256];
int i = 0;
// тут чтение и т.п. фигня
for(i = 0; i < strlen(myString), i++) {numOccur[myString[i]]++;} // вот и посчитали все
-
-
07.01.2010 в 21:48думал делать 2 массива, в одном символ , во втором кол-во
m[14] = A
m[14] = 9
запись не совсем понятна
{numOccur[myString[i]]++;}
myString[i] -- получим символ номером i
к примеру А
{numOccur[A]++;}
а это по символу найдет счетчик и увеличит его???
все дело в том что весь код над прокомментировать.. наверн надо еще лит-ру почитать
-
-
07.01.2010 в 22:08-
-
08.01.2010 в 01:32вот что пока получилось,, а как быть с пробелами ??? как только пробел то получается конец строки..
каж чтото слышал о том пробел вначале менять на другой неиспольз символ, а потом учитывать эту замену
или пробелы не нужны?? и от них вначале избавиться? либо есть другие способы
-
-
08.01.2010 в 04:38да еще статейка про
Арифметические операции с указателями (сложение, вычитание, инкремент и декремент)
наводит на мысль, что да и не тем способ пытаюсь сделать..
надеюсь на Вашу помощь..
-
-
08.01.2010 в 14:06уже на пробелах не останавливаюсь,, но получается ограничение на длину строки , в дан случае 64
и русские буквы пропускает((
-
-
08.01.2010 в 15:07Прости, а тебе не кажется ли, что если ты заводишь строку на 64 символа, то больше в неё и не влезет?)
Или динамическое сделай, или побольше.
А русские буквы - может от среды зависит. Проверь, как у тебя русские буквы в твою строку попадают и какие численные значения имеют.
-
-
08.01.2010 в 15:46это то понятно)) как узнаать длину строки во время работы программы??
len=strlen(myString); показывает длину до первого пробела
как это реализовать??
русские буквы - значения отрицательные
гдет встречалось что надо использовать unsigned char, проблемма решится
правда с заменной char на unsigned char, появл другие ошибки((
а код надо ведь править ?? относительно условий задачи
*.... для работы со строкой и матрицами только указатели и операции вида *P++, P++ ....*
сделал так
numOccur[((unsigned char)myString[i])]++ ;
теперь русские норм! но кодировка чутка пострадала, пришлось
"Символ - Кол-во - Код символа" писать в транслите, тогда норм
-
-
09.01.2010 в 15:37Есть много способов.)
Самый простой из них - юзать библиотеку string, но вам так делать запретили, как я понимаю.(
Можно считывать их в динамический массив и расширять его по мере надобности.
Можно просто завести массив на 65536 чаров и быть увереным, что виндозовская консоль матюгнётся раньше, чем твоя программа. :~P
>len=strlen(myString); показывает длину до первого пробела
Имя некрасивое для функции взял. Перекликается со стандартной функцией для стрингов.
>как это реализовать??
Например, таким образом:
int i = sizeof s;
for (int j = 0; j<=i; ++j)
{
if (s[j] == ' ') (i = j);
};
return(i);
>а код надо ведь править ?? относительно условий задачи
Ну, например, цикл построй так:
j = sizeof myString;
char * c;
c = myString;
for(i=0; i < j;++i, ++c)
{
numOccur[((unsigned char)*c)]++ ;
}
>но кодировка чутка пострадала
Хм... А ты больше ничего не менял?
Просто от того, как ты в массив загоняешь символы вообще говоря не должно зависить то, как ты их выводишь...)
Кстати, я так подумал... По большому счёту не нужно даже строку заводить, можно просто по символу из консоли читать пока строка не закончится, эффект будет тот же, только памяти меньше нужно.)
-
-
10.01.2010 в 04:33перечитал условия
*размер вводится с клавиатуры.* изменил чутка, и вынес в функцию
Нужно еще что-то править??
PS Спасибо всем за поддержку!)
-
-
10.01.2010 в 13:29