Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
fanatdebian
Z3JheSBoYXQ=
339 / 234 / 83
Регистрация: 08.07.2012
Сообщений: 577
1

Получить индекс позиции символа строки на которую ссылается указатели fpos, npos

23.08.2012, 22:09. Просмотров 1082. Ответов 7
Метки нет (Все метки)

C
1
2
3
4
5
6
7
8
9
10
#define START "777"
#define END "888"
 
char string[] ="werertdxc777dh asdgasdfaefxbfghs888df dsfgsdfasdfxfg";
char * fpos, * npos;
 
if ( ( fpos = strstr( string, START)) && ( npos = strstr (string, END ) ) ) {
 
//  some code
}
вопросы.
1. Как получить индекс позиции символа строки на которую ссылается указатели fpos, npos?
2. Как вычислить размерность содержимого между позициями указателей (start и end )в приведенном примере ( это для наглядности )?

Спасибо.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2012, 22:09
Ответы с готовыми решениями:

Ввод строки S и символа С. Результат: число повторений символа С и порядковые позиции вхождения этого символа в строку
Нужно составить программу, в которой пользователь вводит вручную строку S и символ C. Результатом...

Удаление памяти, на которую ссылается указатель
Всем привет. Такой вопрос, что станет с указателем на объект, если этот объект удалить через...

Откуда берется значение указателя после удаления памяти на которую он ссылается?
Всем привет. Почему при удалении памяти указатель еще работает? Пример программы: #include...

Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a?
Скажем я в какой-то момент выделяю память под массив: int *a = new int ; затем память может...

Строки. Дан текст. Найти позиции заданного символа в тексте
Дан текст. Найти позиции заданного символа в тексте

7
StudAssistant
Эксперт
9811 / 7003 / 2319
Регистрация: 17.04.2006
Сообщений: 9,622
23.08.2012, 22:09
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
7
NoMasters
Псевдослучайный
1919 / 1124 / 91
Регистрация: 13.09.2011
Сообщений: 3,187
23.08.2012, 22:24 2
Адресная арифметика же. Конечный адрес - стартовый адрес = количество элементов между этими адресами(включая тот, на который указывает начальный адрес). Кстати, в коде косяк, завершающую подстроку логично искать после стартовой, да.
1
Leomana
59 / 59 / 8
Регистрация: 29.06.2012
Сообщений: 188
23.08.2012, 22:27 3
1.
C
1
int ind = fpos - string;
2.
C
1
int s = abs(npos - fpos);
1
fanatdebian
Z3JheSBoYXQ=
339 / 234 / 83
Регистрация: 08.07.2012
Сообщений: 577
23.08.2012, 22:31  [ТС] 4
спасибо.
0
23.08.2012, 22:31
alkagolik
Заблокирован
23.08.2012, 23:16 5
Цитата Сообщение от Leomana Посмотреть сообщение
int s = abs(npos - fpos);
потенциальный segmentation fault. Лушче обработать exeption.
C
1
2
3
int s = (npos < fpos ? -1 : npos - fpos);
if ( s == -1 )
    exeption(...);
0
accept
4839 / 3260 / 465
Регистрация: 10.12.2008
Сообщений: 10,569
24.08.2012, 02:56 6
Цитата Сообщение от alkagolik Посмотреть сообщение
потенциальный segmentation fault
не, адресы - это просто числа, разность просто делится на размер
вместо abs() надо labs()
0
alkagolik
Заблокирован
24.08.2012, 03:19 7
accept, я тебя не понял. Я говорю что в случае npos < fpos при вычитании мы получим очень большое число без знака и с большой вероятностью выскочим за пределы массива, в лучшем случае просто получим неверно вычисленный индекс, что в итоге сломает логику программы.
0
accept
4839 / 3260 / 465
Регистрация: 10.12.2008
Сообщений: 10,569
24.08.2012, 05:44 8
Цитата Сообщение от alkagolik Посмотреть сообщение
Я говорю что в случае npos < fpos при вычитании мы получим очень большое число без знака
разность указателей - целое число со знаком, ptrdiff_t описан в стандарте
его размер зависит от реализации

так как указатели относятся к элементам одного массива, их можно вычитать
модуль даёт расстояние между ними (как бы они не стояли)

прежде чем вычислять расстояние, нужно убедиться, что они в правильном порядке
0
24.08.2012, 05:44
StackOverflow
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2012, 05:44

Указатели: вывести значение второго байта четвертого символа строки
Нужна помощь есть строка 12 символов. нужно вывести значение второго байта четвертого символа

Поиск позиции первого вхождения в первую строку какого-либо символа из второй строки
Написать метод, входными параметрами которого являются две строки. Метод должен возвращать позицию...

Получить индекс строки в массиве и изменить значение строки
Есть файл &quot;$Temp.yml&quot; &gt; В нем 76 строчек &gt; Мне надо найти строку к примеру &quot;interval&quot; &gt; Получить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru