![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Алексей |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 19.6.2006 Репутация: нет Всего: нет |
Здравствуйте.
Помогите, пожалуйста, найти ошибку. Дана строка, в ней слова разделены запятыми, последняя точка. Напечатать самое длинное слово. Я делал без учета пробелов. Т.е. "ффф,фф,фффффф,фф,ф." Функция возвращает, что попало.
Заранее спасибо. С уважением. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
лучше так
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Xatch |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.6.2006 Репутация: нет Всего: нет |
Могу скинуть прогу, реализованную на Borland C 3
выглядит так: #include <stdio.h> main() { char str[79]; char nac, kon, lmax, i, k, n; i=k=lmax=n=0; printf("введи строку:\n"); while((str[n++]=getchar())!='\n'); for(i=0;i<n;i++) { if(str[i] !=' ' && str[i] !=' ' && str[i] != '\n') k++; else { if(lmax<k) { lmax=k;kon=i; } k=0; } } nac=kon-lmax; kon-=1; for(i=nac;i<=kon;i++) printf("%c", str[i]); printf("\n"); printf("%d %d %d \n", nac, kon, lmax); } сам понимаешь, здесь слова отделены пробелами. а вот так можно на паскале: program ww111; { Определить самое короткое и самое длинное слово в строке введённой с клавиатуры } uses crt; var i,l,min,max,p1,p2,j:longint;a,b:string; t1:array[1..60]of string; t2:array[1..60]of longint; begin clrscr;textcolor(11); write('введите текст: ');readln(a); l:=length(a)+1;a[l]:=' '; for i:=1 to l do if a[i]=' ' then begin inc(j);t1[j]:=b; t2[j]:=length(b);b:=''; end else b:=b+a[i]; max:=t2[1];min:=t2[1];p1:=1;p2:=1; for i:=1 to j do begin if max<t2[i] then begin max:=t2[i];p1:=i; end; if min>t2[i] then begin min:=t2[i];p2:=i; end; end; writeln('самое длинное слово: ',t1[p1]); writeln('самое короткое слово: ',t1[p2]); textcolor(13);write('P.S.'); writeln(' Если слово не выведено на печать, то вы '); write(' поставили несколько подряд идущих пробелов!'); readln; end. Извини если не в тему, но думаю разобраться здесь можно... |
|||
|
||||
HMLd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 27.6.2006 Где: Polska Репутация: 1 Всего: 0 |
Я сделал так:
![]() |
|||
|
||||
Алексей |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 19.6.2006 Репутация: нет Всего: нет |
А разве компилятор операцию str[i] не выполняет дольше, чем *(str+i)?
Все таки, на сколько мне известно, стилем C++ является второй вариант. Поэтому я и пытался сделать с помощью указателей. MAKCim, Ваш вариант, конечно, лучше, но программу я эту пишу по просьбе одного студента, завалившего экзамен. Ему не поверят, что это он писал. Я пытался переделать Ваш вариант Xatch, но опять получил кучу ошибок. ![]() |
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Тут же вроде нет ничего сверхестественного
по-моему для указателей компилятор str[i] разворачивает в *(str+i) поэтому, имхо, да -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
Rockie |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
чтож, выложу и я свою версию =)
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||
|
|||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Алексей, возможно это будет быстрее. но скорость - не единственный критерий оценки программы. imho прирост в скорости применительно к данной лабе будет абсолютно незаметен. зато *(str+i) намного труднее читается чем str[i]. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
HMLd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 27.6.2006 Где: Polska Репутация: 1 Всего: 0 |
Rockie
Полностью согласен... А тем более если тот студент экзамен завлил, то str[i] IMHO лучше ![]() |
|||
|
||||
Алексей |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 19.6.2006 Репутация: нет Всего: нет |
У меня на руках его лекции. Вернее ксерокс лекций его одногруппницы ![]() Они кроме функций strlen, strcpy, strcmp и strcat ничего больше не учили. (Как можно С++ за семестр выучить?!) Вряд ли они поверят, что он ради экзамена полез по справочникам.
А если преподаватель рекомендовал с помощью указателей? В его положении не хорошо спорить. ![]() Поэтому я и пытаюсь сделать с помощью указателей и с вышеупомянутыми функциями. ![]() |
||||
|
|||||
Алексей |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 19.6.2006 Репутация: нет Всего: нет |
Ну вот я ошибку нашел!
n=0 ни туда воткнул! ![]() Код, конечно, корявый, но для него сойдет. Теперь объясните мне, почему это в С++ 3.1 работает, а в 6-м Билдере нет. В Билдере оно к распечатанному слову добавляет какие-то символы. |
|||
|
||||
Rockie |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
лично меня все учили нажимать F1 и Ctrl+F1. или там где твой друг учится пользуются только теми функциями что в тетрадке? а его и не надо выучить. нужно понимать где что лежит (жать F1). imho
так об этом нужно черным по русскому написать в задании. кстати str[i] это тоже указатели. [] - это разыменование.
как тебе кажется эти предложения звучат в связке? -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||||
|
|||||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
[] - Это немного больше, чем разыменование
![]() |
|||
|
||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
вообще это мало к С++ относится ![]()
Оба варианта - с указателями, просто с [] более читабельный вариант!
базис должен быть -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
Алексей |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 19.6.2006 Репутация: нет Всего: нет |
А Вы разницу между "корявый" и "неработающий" чувствуете?
А какая разница между справочником и F1? ![]() ![]() Ему бы вообще дохлой троечки хватило! |
||||
|
|||||
AlanG |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 11.5.2006 Где: РашЫн ФидирейшЫн Репутация: нет Всего: нет |
Народ, вы 4е
![]() ![]() |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
и что? инкремент указателя - переход к следующему символу инкремент переменной - увеличение длины текущего слова -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Rockie |
|
||||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
по ходу ваших рассуждений у образования должны покраснеть уши? =) думаю это взаимозаменяемые понятия.
оно и в Borland 3.1 не работает. так как: выделяется память для [k+1] а юзается [k-1]. лишнее выводится потомучто нет символа окончания строки. вообще честно говоря неясно где это очищается
-------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||||||
|
|||||||||
Алексей |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 19.6.2006 Репутация: нет Всего: нет |
Вот теперь всем огромное спасибо!
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |