|
Модераторы: bsa |
|
babat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 6.11.2011 Репутация: нет Всего: нет |
Помогите написать функции для работы со строками)
Я несколько написал,но не работают как надо. 1)int strlen(char*s) 2)char*strcpy(char*dest,char*s,int p,int k) 3)char*strdel(char*s,int p,int k) 4)char*strins(char*sub,char*s,int p) 5)int strpos(char*sub,char*s) 6)int strcmp(char*s1,char*s2) 7)char*strcat(char*dest,char*s1,char*s2) 1) strlen -длина строки 2) strcpy-помещает в dest K символов строки S,начиная с Р-го 3) strdel- Удаляет из S K символов,начиная с Р-го 4) strins - вставляет sub в s с р-й позиции,с предположением,что в S достаточно места 5) strpos - возвращает позицию 1-го вхождения sub в s или -1 6) strcmp- возвращает 0 если строки равны,1 если s1>s2,-1 если s1<s2 7) strcat- Сцепляет s1 и s2 и помещает их в dest Задание:реализовать 6 из 7 функции в 4х вариантах каждую. Вот написал
Это без проверок всяких.Почему мусор какой-то выводит? Это сообщение отредактировал(а) babat - 6.11.2011, 18:23 |
|||
|
||||
tzirechnoy |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: -1 Всего: 16 |
Как минимум строка не завершэна '\0'. Но, не зная задание, не могу сказать -- это ошыбка реализацыи strcpy1 или Вы неправильно пытаетесь его использовать.
|
|||
|
||||
babat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 6.11.2011 Репутация: нет Всего: нет |
1) strlen -длина строки
2) strcpy-помещает в dest K символов строки S,начиная с Р-го 3) strdel- Удаляет из S K символов,начиная с Р-го 4) strins - вставляет sub в s с р-й позиции,с предположением,что в S достаточно места 5) strpos - возвращает позицию 1-го вхождения sub в s или -1 6) strcmp- возвращает 0 если строки равны,1 если s1>s2,-1 если s1<s2 7) strcat- Сцепляет s1 и s2 и помещает их в dest |
|||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
babat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 6.11.2011 Репутация: нет Всего: нет |
спасибо,понятно)) видимо я еще не до уонца от паскаля отцепился(
еще вопрос. Почему размер массива нельзя задавать таким способом : int k=10; char s[k]; или char s[]="12334"; char s1[strlen(s)+1]; |
|||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
хммм. как это ? там же "галочка" на Си++, а не на Си стоит -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
borisbn, Ну во первых, я здесь не увидел нигде упоминания, что нужен именно С. Ну, а раз так, то лёгким движение руки.... программка превращается....превращается... http://liveworkspace.org/code/4358235b7ac9...246f38227a92e31 |
|||
|
||||
babat |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 6.11.2011 Репутация: нет Всего: нет |
Почему в строке вывода ,где должно изначальное значение s выводиться,выводится strins?
Здесь такой-же вопрос ++ помогите исправить:
Это сообщение отредактировал(а) babat - 6.11.2011, 20:27 |
||||||
|
|||||||
borisbn |
|
||||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
volatile, я, почему-то, был уверен, что эти "фокусы" возможны только в Си, а в Си++ такое невозможно... babat, в ф-ции strins1 почему копирование в выходную строку начинается с i=p ??? должно быть так: 1) скопировать в выходную строку из входной с 0 до p-1 2) добавить к выходной строке подстроку (sub) 3) добавить к выходной строке входную от p до конца входной в ф-ции strdel1 будь проще и к тебе потянутся
в ф-ции strpos1 вообще всё неправильно. нужно как-то так
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||
|
|||||||
volatile |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
babat |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 6.11.2011 Репутация: нет Всего: нет |
Здесь же S и есть выходная строка,а вот этим for (int i=p,j=0;i<len1;++i,++j) я копирую в s1 строку s начиная с Р-й позиции.А потом с Р-й позиции в S я заталкиваю Sub. Затем С позиции P+strlen(sub) я заталкиваю S1. Вроде как правильно,но в строке вывода printf("strins1(\"%s\",\"%s\",\"%i\")=\"%s\"\n",sub,s,p,strins1(sub,s,p)); Должно выводиться вот так : strins1("456","123789","3")="123456789" А выводит вот так: strins1("456","123456789","3")="123456789" Почему?(( Народ,HELP! Это сообщение отредактировал(а) babat - 8.11.2011, 14:52 |
|||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
babat, ты изменяешь первоначальную строку, а т.к. параметры в ф-цию printf передаются с конца, то сначала выполнится strins1(sub,s,p) - при этом s изменится - затем её результат передастся в printf, затем туда передастся p, а затем s (как ты помнишь - изменённое)
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
bsa |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Это implementation defined, нет? А вообще данная ситуация называется "undefined behaviour" - неопределенное поведение. |
|||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
почти уверен, что да. и судя по implementation'у babat у него defined именно так и опять соглашусь: такой код - прямой путь к UB. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |