Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2009, 22:27   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
Плохо Возвращение функциями указателей

Читаю про указатели, тут для примера,предоставляется код. Программа ищет какую-то подстроку в строке. Кто нибудь может объяснить,каким образом ищется подстрока из этого кода,если не сложно. Заранее благодарю.

Код:
#include <iostream>
using namespace std;
 
char *get_substr(char *sub, char * str);  //char *get_substr возвращает указатель на char,что Это даёт?
 
int main()
{
        setlocale(0,"");
        char *substr = get_substr("три","один два три четыре");
        cout<<"Заданная подстркоа найдена: "<<substr;
        cin.get();
 
}
 
char *get_substr(char *sub, char * str)
{
        int t;
        char *p, *p2, *start;
 
        for(t = 0; str[t]; t++)
        {
                p = &str[t];
                start = p;
                p2 = sub;
                while(*p2 && *p2 == *p)  //Это неизвестно что делается
                {
                        p++;
                        p2++;
                }
if(!*p2)         //Это неизвестно что такое
return start;
 
        }
}

Последний раз редактировалось Golovastik; 11.09.2009 в 22:41.
Golovastik вне форума Ответить с цитированием
Старый 11.09.2009, 22:49   #2
Kopwyh
НашКодинг
 
Регистрация: 21.05.2009
Сообщений: 9
По умолчанию

Подпрограмма возвращает указатель куда-то в строку str. Причём неважно, где находится str в сегменте данных или, как в данной программе, в сегменте кода.
Причём начиная с этого указателя идут символы равные тем, что в строке sub.
Код:
char *get_substr(char *sub, char * str) 
{
	int t;
	char *p, *p2, *start;

	for(t = 0; str[t]; t++)// Пока не закончится строка str
	{
		p = &str[t];
		start = p;// Сохранить начало подстроки
		p2 = sub;
		while(*p2 && *p2 == *p) // пока символы двух строк равны
                                                  //(или строка sub не закончилась)
		{
			p++; // Взять следующие символы.
			p2++;
		}
if(!*p2) // Если достигнут конец строки sub
return start; // вернуть указатель на то место, где начинается подобная строка в строке str.

	}
}
Теперь пара слов об недочётах:
1. Нет returna в конце. Нужен return NULL;
2. for(t = 0; str[t]; t++) заменить на for(t = 0; str[t] !=0; t++)
3. while(*p2 && *p2 == *p) заменить на while(*p2 !=0 && *p2 == *p)
Все эти пункты относятся к недочётам, т.к. не все компиляторы способны корректно отработать подобные недомолвки.

Последний раз редактировалось Kopwyh; 11.09.2009 в 22:53. Причина: Теперь ответил на все вопросы.
Kopwyh вне форума Ответить с цитированием
Старый 14.09.2009, 23:04   #3
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Не подскажите, просто не знаю, как реализовать данный алгоритм, только чтоб в тексте искало чисто одно слова, с помощью указателей. Например из предложения:
Код:
Однажды, в студеную зимнюю пору, я из лесу вышел, был сильный мороз, гляжу поднимается высоко в гору.....
найти одно слово гляжу, не могу понять, как сделать.
Golovastik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция: возвращение нескольких значений. Вадим Буренков Общие вопросы Delphi 2 14.05.2009 18:05
Возвращение назад в меню K[Lanc]N Помощь студентам 5 22.02.2009 11:14
Возвращение массива символов char ActioNs Общие вопросы C/C++ 3 10.01.2009 02:33
Возвращение стража.... Манжосов Денис :) Софт 0 18.09.2008 22:57