Начал изучать Си. Первые трудности. |
Здравствуйте, гость ( Вход | Регистрация )
Начал изучать Си. Первые трудности. |
DEADHUNT |
30.1.2011, 11:27
Сообщение
#11
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
файл utf8, а ты его как ASCII читаешь.
|
|
|
micro-chipset |
30.1.2011, 11:34
Сообщение
#12
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 27.1.2011 Пользователь №: 2371 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
Алексей1153 |
30.1.2011, 15:00
Сообщение
#13
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
фразу-то не закончил. Какую область видимости будет иметь константа? как то есть где, в том блоке, где определена не понятно чему ты учишь, но в C нету memory.h, функция memset определёна в string.h/cstring. по поводу arrlen*sizeof(*length), проще так: memset(arr, 0, sizeof(arr)); http://msdn.microsoft.com/en-us/library/aa246471(VS.60).aspx тут два заголовочника. Можно любой А что именно есть в его среде, я не знаю Насчёт "проще" - я выше написал, почему я именно так сделал - а то он и динамический массив так инициализировать будет |
|
|
micro-chipset |
30.1.2011, 15:59
Сообщение
#14
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 27.1.2011 Пользователь №: 2371 Спасибо сказали: 0 раз(а) Репутация: 0 |
А все же что с решением задачки. Работает она не верно же
|
|
|
Алексей1153 |
30.1.2011, 16:49
Сообщение
#15
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
micro-chipset, покажи алгоритм на обычном русском языке - что ты делаешь. Без алгоритма не напишешь и не отладишь
|
|
|
DEADHUNT |
30.1.2011, 17:12
Сообщение
#16
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
А как поправить? для работы с UTF можешь использовать например ICU. http://msdn.microsoft.com/en-us/library/aa246471(VS.60).aspx тут два заголовочника. Можно любой А что именно есть в его среде, я не знаю Насчёт "проще" - я выше написал, почему я именно так сделал - а то он и динамический массив так инициализировать будет когда я начинал писать программы на C, я подключал <malloc.h> вместо <stdlib.h>(когда мне были нужны malloc/realloc/calloc/free). Да работает, но это не правильно. И в один момент компилятор может выдать ошибку, потому-что это не стандартный заголовочный файл. Сообщение отредактировал DEADHUNT - 30.1.2011, 17:13 |
|
|
micro-chipset |
30.1.2011, 17:37
Сообщение
#17
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 27.1.2011 Пользователь №: 2371 Спасибо сказали: 0 раз(а) Репутация: 0 |
А как поправить? для работы с UTF можешь использовать например ICU. А поподробней Алгоритм словами если ну примерно так представляю: Считываем посимвольно входной поток при помощи getchar(). Начиная с первого символа проверяем слово это или пробел или табуляция или перевод на новую строку если буква увеличиваем переменную на один если следующая снова буква то увеличиваем еще на один в итоге в переменной накопится количество букв слова. Далее нужно вывести в нужную ячейку массива ячейка масива с номером равным количеству букв. и так повторить снова со следующим словом. Может грубо сформулировано но как понимаю она должна работать. Поправьте пожалуйста если что то не так. |
|
|
Алексей1153 |
30.1.2011, 17:58
Сообщение
#18
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
micro-chipset, это ты уже почти программу пытаешься написать, только словами А алгоритм будет примерно такой:
1) инициализировать переменные и массив, в котором хранится текущее содержимое гистограммы 2) считать очередное слово. Определить его длину, инкрементировать нужный счётчик в массиве гистограммы 3) если строка не закончилась, перейти к пункту 2 4) иначе - распечатать гистограмму 5) ждать нажатие клавиши 6) выйти |
|
|
micro-chipset |
30.1.2011, 18:06
Сообщение
#19
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 27.1.2011 Пользователь №: 2371 Спасибо сказали: 0 раз(а) Репутация: 0 |
micro-chipset, это ты уже почти программу пытаешься написать, только словами А алгоритм будет примерно такой: 1) инициализировать переменные и массив, в котором хранится текущее содержимое гистограммы 2) считать очередное слово. Определить его длину, инкрементировать нужный счётчик в массиве гистограммы 3) если строка не закончилась, перейти к пункту 2 4) иначе - распечатать гистограмму 5) ждать нажатие клавиши 6) выйти Тут все понятно только наверное не согласен с пунктом 3 думаю не строка а входной поток(проверить через EOF) строк может быть и несколько. И дальше как это реализовать в программе с алгоритмом все ясно. |
|
|
Алексей1153 |
30.1.2011, 18:54
Сообщение
#20
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
строку можно тоже представить потоком, а новые строки разделены символами возврата каретки и перевода строки .
А дальше берёшь каждый пункт основного плана, так сказать, и детализируешь 1 - это уже сделали выше. 2 - например, сделай процедуру, которая на вход получает: -начало потока (вернее, текущее место, откуда начинать), -максимальная длина, которую разрешено обработать, возвращает: -длину слова -позицию начала ещё не обработанных символов прототип примерно такой const char* void F(const char* beg, const int len, int& wordlen); Сообщение отредактировал Алексей1153 - 30.1.2011, 18:55 |
|
|
Текстовая версия | Сейчас: 26.4.2024, 6:15 |