Консультация № 173120
10.10.2009, 02:05
25.00 руб.
0 2 1
Здраствуйте, у меня снова вопрос о работе со строками,
Если есть строка: "#Fusername#filename#musor" как мне из неё получить такую строку: "#Ffilename#musor" т.е. выбросить username, мне на ум приходит только такой способ:
Код:

strcpy(tmp_buff, "#F");
memcpy(&tmp_buff[2], &buff[strchr(&buff[2], '#') - buff], strchr(&buff[strchr(&buff[2], '#') - buff +1], '#') - &buff[strchr(&buff[2], '#') - buff] );

в buff исходная строка, a tmp_buff результат. И то, у меня тут не до конца, у меня будет"#Ffilename"
Подскажите как можно решить эту проблему более просто, чтобы код стал более читабельным?
Зарамее спасибо.

Обсуждение

Неизвестный
10.10.2009, 03:04
общий
это ответ
Здравствуйте, Станислав.
Все зависит от того на каком именно языке Вам требуется ответ(C или C++), а так же от того какие возможности Вы хотите использовать. Вариантов более чем достаточно.
Учитывая, что Вы использовали строковые функции C я остановился на них.
Программа. С++. MS VS 2008.
Код:

#include <iostream>
#include <cstring>

using namespace std;

// Функция выполняющая требуемое преобразование. Возвращает требуемый размер области памяти для размещения результата.
// Если dst==0 на том и заканчивается. Иначе копирует согласно условия.
size_t del_username(const char* const src,char* dst)
{
// Требуемый размер буфера
size_t len=0;
// Проверим начинается ли строка с "#F"
if(!strncmp(src,"#F",2))
{
// Первый копируемый символ из filename
const char* first=strchr(src+2,'#');
// Если есть то
if(first)
{
len=strlen(++first)+3;
// Если dst!=0 то копируем
if(dst)
{
strncpy(dst,src,2);
strcpy(dst+2,first);
}
}
}
return len;
}

int main()
{
char src[]="#Fusername#filename#musor";
try
{
// Вычисляем размер области и выделяем память
char* dst=new char[del_username(src,0)];
// Копируем
del_username(src,dst);
// Выводим для проверки
cout<<dst<<endl;
delete[] dst;
}
catch(...)
{
}
return 0;
}

Вывод:
Код:
#Ffilename#musor

Неизвестный
10.10.2009, 03:39
общий
Станислав:
Если что то не получается укажите причину и компилятор.
Форма ответа