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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2015, 19:46   #1
FULEREN
Пользователь
 
Регистрация: 23.03.2012
Сообщений: 56
По умолчанию Удаление части строки.

Доброго времени суток форумчане, собственно сабж. Имеется строка из которой необходимо удалить кусок. Удаление куска текста ограниченного определенными символами я решил вот так:
Код:
while(TRUE){
	first_bracket = strchr(textbuffer, '<');
	second_bracket = strchr(textbuffer, '>');
		
	if (first_bracket && second_bracket){
		memmove(first_bracket, second_bracket + 1, strlen(textbuffer) - (second_bracket - textbuffer) + 1);
	}
	else{
		break;
	}	
}
Все прекрасно работает, но встал вопрос, а как удалить часть строки ограниченной определенными словами, а не символами? Как это можно реализовать(язык C)?
FULEREN вне форума Ответить с цитированием
Старый 06.02.2015, 20:18   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

strchr меняете на strstr, в memmove second_bracket + 1 меняете на second_bracket + strlen(second_bracket) и пересчет длины чуток подправить нужно.
ЗЫ. Код неправильно отработает строку "ssss><cut>Hello World"
Как вариант: second_bracket искать не в textbuffer, а в first_bracket (предварительно проверив конечно, что он не NULL)
second_bracket = strchr(first_bracket, '>');
pu4koff вне форума Ответить с цитированием
Старый 06.02.2015, 20:39   #3
FULEREN
Пользователь
 
Регистрация: 23.03.2012
Сообщений: 56
По умолчанию

Большое спасибо, то что код неправильно отработает строку, это не страшно, ибо я удаляю html теги, а там где есть "<" всегда будет ">". Не могли бы вы помочь с пересчетом длинны?
FULEREN вне форума Ответить с цитированием
Старый 06.02.2015, 21:03   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

вроде так:
Код:
memmove(first_bracket, second_bracket + strlen(second_bracket), strlen(textbuffer) - (second_bracket - textbuffer) - strlen(second_bracket) + 1);
pu4koff вне форума Ответить с цитированием
Старый 06.02.2015, 21:19   #5
FULEREN
Пользователь
 
Регистрация: 23.03.2012
Сообщений: 56
По умолчанию

Опробовал вашу поправку, к сожалению не работает, не удаляет то что нужно, зато с лихвой рубит почти все, оставляя только начало строки.

Дело в том, что strstr ищет первое вхождение, а в исходном тексте второе ограничительное слово может встретиться раньше первого, как это можно решить? Т.е что бы strstr учитывало только то, что идет после 1 ограничительного слова.

Последний раз редактировалось Stilet; 06.02.2015 в 21:58.
FULEREN вне форума Ответить с цитированием
Старый 06.02.2015, 21:51   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

вторую строку искать в том, что осталось:
second_bracket = strstr(first_bracket, "parampampam");
или даже
second_bracket = strstr(first_bracket + strlen(first_bracket), "parampampam");
По переносу попробуйте так:
memmove(first_bracket, second_bracket + strlen(second_bracket), strlen(second_bracket)-strlen("parampampam")+1);
соответственно "parampampam" нужно заменить на завершающую строку, которая вместо символа > из первоначального варианта.
pu4koff вне форума Ответить с цитированием
Старый 06.02.2015, 22:18   #7
FULEREN
Пользователь
 
Регистрация: 23.03.2012
Сообщений: 56
По умолчанию

Вроде разобрался, и еще, что бы не создавать отдельную тему. Как в тексте можно заменить &nbsp; на пробелы?
FULEREN вне форума Ответить с цитированием
Старый 07.02.2015, 21:03   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Заменить никак. & можно на пробел заменить, а дальше так же остаток строки смещать через memmove чтобы затереть оставшиеся nbsp;
pu4koff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление части строки Vladislavv Помощь студентам 1 23.09.2014 01:25
Удаление части текста из ячейки. ydirect Microsoft Office Excel 1 27.06.2014 23:15
Удаление части строки после символа leus2009 Microsoft Office Excel 3 11.05.2014 02:02
Удаление части строк в memo igabenu Помощь студентам 3 17.10.2012 17:47
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54