17 / 17 / 3
Регистрация: 14.10.2009
Сообщений: 82
|
|
1 | |
Строки в С15.12.2009, 00:58. Показов 1792. Ответов 19
Добрый вечер всем!
Подскажите пожалуйста как можно найти длину той части строки S которая содержит только символы из строки S1 (Что то похожее на стандартную функцию С++ StrSpn, но функция strspn возвращает индекс первого символа в строке string1, который не принадлежит множеству символов string2. Это значение эквивалентно длине начальной подстроки в строке string1, которая полностью состоит из символов строки string2. Нулевой символ окончания строки string2 не рассматривается. Если string1 начинается с символа, не входящего в string2, strcpn возвращает 0.)
0
|
15.12.2009, 00:58 | |
Ответы с готовыми решениями:
19
Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки Добавить строки, начиная со строки К1 и до строки К2, в динамический массив строк Удалить строки динамической матрицы, начиная со строки К1 и до строки К2 Удалить строки, начиная со строки К1 и до строки К2 (динамические массивы) |
32 / 32 / 7
Регистрация: 26.10.2009
Сообщений: 98
|
|
15.12.2009, 01:39 | 2 |
Тогда тебе нужно вначале использовать эту функцию:
0
|
17 / 17 / 3
Регистрация: 14.10.2009
Сообщений: 82
|
|
15.12.2009, 02:24 [ТС] | 3 |
не так не катит...((
вообщем, никаких стандартных функций обработки строк использовать нельзя...
0
|
32 / 32 / 7
Регистрация: 26.10.2009
Сообщений: 98
|
||||||
15.12.2009, 02:37 | 4 | |||||
Ну чтож, тогда так ( если я правильно понял задание):
перебирай строку S, пока в ней не встретится символ из S1, а дальше перебирай, пока не встретиться символ, не входящий в S1 и запомни количество переборов. Добавлено через 2 минуты Тебе придется написать функцию наподобие этой:
0
|
17 / 17 / 3
Регистрация: 14.10.2009
Сообщений: 82
|
|
15.12.2009, 02:52 [ТС] | 5 |
впринципе да, можно попробовать, сенк)
0
|
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
|
||||||
15.12.2009, 02:52 | 6 | |||||
0
|
17 / 17 / 3
Регистрация: 14.10.2009
Сообщений: 82
|
|
15.12.2009, 03:08 [ТС] | 7 |
спасиб, ребят, большое!! очень признателен!
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
||||||
15.12.2009, 09:18 | 8 | |||||
Для разнообразия...
1
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
||||||
15.12.2009, 10:34 | 10 | |||||
Код
$ grep EOF /usr/include/stdio.h #ifndef EOF # define EOF (-1)
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
15.12.2009, 11:19 | 11 |
Код
4.9 INPUT/OUTPUT <stdio.h> 4.9.1 Introduction The header <stdio.h> declares three types, several macros, and many functions for performing input and output. The types declared are size_t (described in $4.1.5); FILE which is an object type capable of recording all the information needed to control a stream, including its file position indicator, a pointer to its associated buffer, an error indicator that records whether a read/write error has occurred, and an end-of-file indicator that records whether the end of the file has been reached; and fpos_t which is an object type capable of recording all the information needed to specify uniquely every position within a file. The macros are NULL (described in $4.1.5); _IOFBF _IOLBF _IONBF which expand to distinct integral constant expressions, suitable for use as the third argument to the setvbuf function; BUFSIZ which expands to an integral constant expression, which is the size of the buffer used by the setbuf function; EOF which expands to a negative integral constant expression that is returned by several functions to indicate end-of-file ,that is, no more input from a stream; тем более, что она действительно не возвращает его, а возвращает просто огромное число а при этой инфе, вообще получается, что она возвращает что-то плюс наслоение (а вдруг там действительно такое огромное количество символов, получится правильный результат == ошибке)
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
||||||
15.12.2009, 12:13 | 12 | |||||
Функции типа по сараю, какое она число возвращает. Это для нас они (числа) отрицательные или положительные, а машине важно лишь - заморачиваться еденицей в старшем разряде, или нет. Константа EOF выбирается такой, чтобы быть достаточно "дикой" для правдоподобного результата. Учитывая, то, что считаются символы в строке, значение UINT_MAX всё-таки какое-то большое
Вот к примеру кусок кода, который по Вашей логике и компилироваться не должен бы. Однако работает и во всех случаях правильно...
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
16.12.2009, 09:05 | 14 |
Ага. Но этого вполне достаточно, чтобы использовать константу EOF в качестве сигнала об ошибке.
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
16.12.2009, 10:16 | 15 |
нельзя в том случае её использовать, потому что она может совпасть с каким-то количеством символов в строке
и пример выше показывает, что EOF может спокойно преобразоваться в шесть (ну это для примера, там может быть что угодно, хоть пятнадцать)
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
||||||
16.12.2009, 10:42 | 16 | |||||
Это, если отыскать систему, в которой EOF, как
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
17.12.2009, 01:41 | 17 |
ну, наконец-то
так вот, выше текст - это кусок стандарта, то есть, любой компилятор имеет право установить такой EOF спасибу ставлю за то, что кое-что понял, благодаря тому коду очень важное size_t там надо поменять на long int, тогда это будет подходить для строк в пределах двух гигабайт на современных системах и EOF тогда будет подходить по знаку (код ясен и не нужно думать, что там преобразовывается)
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
17.12.2009, 02:06 | 18 |
Ага, имеет... Найти бы ещё такой... Строго говоря совсем правильно было бы long int использовать, но и так работать будет. Знаете компилятор, в котором EOF - не (-1) - назовите, интересно! Мне представляется, что значение этой константы должно выбираться по такой примерно логике:
NULL == 0 EOF == ~0 Где-то когда-то читал про чуднЫе системы, в которых и в байте не 8 бит и отрицательные числа не дополнительным кодом записываются... Вот там EOF может и был бы смысл какое-то другое значение присваивать. Но в жизни я таких никогда не встречал. Так, что, имхо можно этим просто не заморачиваться...
0
|
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
|
|
17.12.2009, 10:52 | 19 |
Сообщение от easybudda
Сообщение от easybudda
даже не компиляторы рассмотреть, а несколько разных версий одного я, вот, думаю, что EOF делается как -1 только потому, что это первое отрицательное число после нуля
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
17.12.2009, 11:07 | 20 |
Или потому, что в дополнительном коде -1 - это как раз тот самый "не ноль" не зависимо от размера переменной, которой это значение присваивается...
Учитывая вышесказанное - с какой целью?
0
|
17.12.2009, 11:07 | |
17.12.2009, 11:07 | |
Помогаю со студенческими работами здесь
20
Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка содер-жится в ней Даны три строки. Определить можно ли из символов третьей строки получить первую и вторую строки Ввести строки и через n символов первой строки вставить вторую строку, и так до конца строки Сравнить строки, первый несовпадающий элемент строки-приемника записать в регистр AL, строки-источника - в DL Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |