Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна функция работы со строкой 
:(
    Опции темы
En_t_end
Дата 6.8.2005, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Нужна функция принимающая два аргумента в виде двух строк. Ищет вхождение второй строки в первую и удаляет это вхождение. Требуется, чтобы функция убирала за собой мусор, а не оставляла пробелы вместо удаленных символов.
PM MAIL ICQ Skype GTalk Jabber   Вверх
mr.Anderson
Дата 6.8.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Пардон, а что такое "вхождение"? Как это понять?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
codelord
Дата 6.8.2005, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 1
Всего: 39



En_t_end в чем пишешь?


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
En_t_end
Дата 6.8.2005, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



codelord
VS 2003 .NET
PM MAIL ICQ Skype GTalk Jabber   Вверх
comcon1
Дата 6.8.2005, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Для std::string это будет как-то так:
Код

str2.erase(str2.find(str1), str1.size());

Хочешь с char* - напиши скрипт. А делается так:
Код

f(char *str2, char *str1) {
      char *n = strstr(str2, str1);
      strcpy(
               n, 
               n + strlen(str1),             
             );
      str2[strlen(str2) - strlen(str1)] = '\0';
}



--------------------
PM MAIL   Вверх
LPBOY
Дата 6.8.2005, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



comcon1,
Записывать 0 в строке str2[strlen(str2) - strlen(str1)] = '\0'; необязательно, он там уже есть...
smile

Это сообщение отредактировал(а) LPBOY - 6.8.2005, 18:30
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
En_t_end
Дата 6.8.2005, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Цитата(comcon1 @ 6.8.2005, 21:34)
Хочешь с char*

Именно. Пример не работает smile

Попробую упростить задачу.
Есть строка. Я знаю, что в конце её может быть другая известная мне строка. Но её может и не быть ! Мне нужна функция(или способ узнать) возвращающая начало вхождения этой другой строки, чтобы поставить там нуль-терминатор.
В принципе это можно сделать самостоятельно, ну там читать в цикле массив, но это будет слишком прямоугольно smile

Это сообщение отредактировал(а) En_t_end - 6.8.2005, 18:31
PM MAIL ICQ Skype GTalk Jabber   Вверх
comcon1
Дата 6.8.2005, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



2 LPBOY - да. strcpy скопирует вместе с нулем. Действительно.

2 En_t_end Все должно работать. Сейчас проверю у себя и дам тестерный код.


--------------------
PM MAIL   Вверх
LPBOY
Дата 6.8.2005, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Тогда так:
Код

#include <iostream>

char* fn(char* s1, const char* s2)
{
char* p = strstr(s1, s2);
*p=0;
return s1;
}

int main()
{
    char s1[]="TheTest";
        char s2[]="Test";
    std::cout<< fn(s1, s2) <<std::endl;
    return 0;
}

PS пример comcon1 работает.

Это сообщение отредактировал(а) LPBOY - 6.8.2005, 18:55
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
comcon1
Дата 6.8.2005, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: 12
Всего: 17



Код

      1 #include <string.h>
      2 #include <stdio.h>
      3 #include <stdlib.h>
      4 #include <assert.h>
      5
      6 void f(char *str2, char *str1) {
      7         char *n = strstr(str2, str1);
      8         assert(n);
      9         strcpy(n, n + strlen(str1)  );
     10 }
     11
     12 int main() {
     13   char *ped = (char*)malloc(200);
     14   strcpy(ped, "MATHERNAL_INTERNAL_MATHERNAL2");
     15   char *id = (char*)malloc(200);
     16   strcpy(id, "INTERNAL");
     17   f(ped, id);
     18   printf("%s \n", ped);
     19   free(ped);
     20   free(id);
     21   return(0);
     22 }

Пример прямо из Vima.
Вывод:
Код

MATHERNAL__MATHERNAL2

-------------------
Кстати, чисто С.

Это сообщение отредактировал(а) comcon1 - 6.8.2005, 19:01


--------------------
PM MAIL   Вверх
En_t_end
Дата 7.8.2005, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



comcon1
Извинияюсь, прошелся дебагером. Ошибка была у меня. Да к тому же у тебя текст в коде почему-то в Unicode - IDE ругается smile
А пример действительно хороший - в лучших традициях чистых Сей.


PM MAIL ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0879 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.