Как одну строку в другую вставить //С++
Что значит вставить?
c2="Fucking ";
insert(c2,c1,10);// 10+-1
printf("%s\n",s1);
----------------------Имеем на выходе---------------------
Happy New Fucking Year!
Видимо, надо писать самому. Смотри strncpy strncat
void insert(char * dest, char * source, const char * s, int index)
{
strncpy(dest, source, index);
strcpy(dest+index, s);
strcpy(dest+index+strlen(s source + index);
}
void main
{
c1="Happy New Year!";
c2="Fucking ";
char buffer[1000];
insert(buffer, c1,c2,10);
printf("%s\n",buffer);
}
нет проверок на длину, опять же
char *result = calloc(strlen(s1) + strlen(s2) + 1, sizeof(char;
strncpy(result, s1, index);
strcat(result, s2);
strcat(result, s1 + index);
Так пойдет?
void insert(char* dest, char* src, char* s, int size, int index)
{
char *end = dest+size-1;
char* p;
char* q;
char* r;
for (p=dest,q=src; (*q) && (p<end); *p++=*q++);
for (r=s; (*r) && (p<end); *p++=*r++);
for (; (*q) && (p<end); *p++=*q++);
*p = '\0';
}
А аргумент Index зачем?
void insert(char* dest, char* src, char* s, int size, int index)О памяти заботится вызывающий?
О памяти заботится компилятор.
Все остальное - от лукавого.
О памяти заботится компилятор.Чооо?
Да, под результат память выделяет вызывающий, size - ее размер.
Два раза strncat чтобы s в примере проходилась три раза. Это ещё вопрос, что от лукавого.
Смотри strncpy strncat
strncpy и strncat -- это не С++ а С, а в std::string есть навалом insert-ов
basic_string& insert(
size_type _P0,
const value_type* _Ptr
);
basic_string& insert(
size_type _P0,
const value_type* _Ptr,
size_type _Count
);
basic_string& insert(
size_type _P0,
const basic_string& _Str
);
basic_string& insert(
size_type _P0,
const basic_string& _Str,
size_type _Off,
size_type _Count
);
basic_string& insert(
size_type _P0,
size_type _Count,
value_type _Ch
);
iterator insert(
iterator _It,
value_type _Ch = value_type( )
);
template<class InputIterator>
void insert(
iterator _It,
InputIterator _First,
InputIterator _Last
);
void insert(
iterator _It,
size_type _Count,
value_type _Ch
);
На любой вкус.
#include <string> //без .h!
Надеюсь, ты в курсе, как долго компилируются проекты под stl. И насколько "легко" незнающему человеку в этом разобраться.
Причем тут это? Если человеку надо узнать как вставить одну C-строку (char *) в другую, пусть так и спрашивает, А если он написал //C++ значит хотел пользоваться std::string. По-моему так (С).
#include <string>
#include <iostream>
int main(int argc,char** argv) {
std::string c1 = "Happy New Year!";
std::string c2 = "Fucking ";
c1.insert(10,c2);
std::cout << c1;
}
Хотя и другие не хуже
std::string c1 = "Happy New Year!";
c1.insert(10, "Fucking ");
...
Да, я знаю как это выглядит. На таком маленьком примере всё просто. Если человек спрашивает про С++, то это ещё не значит, что ему нужен STL. Скорее всего, он начинающий. Не надо его пугать.
в оригинальном сообщении написано char*
про STL я зняю, только вот со string ни когда не работал.
по этому не особо хотелось его юзать. Тем более ради одного раза вкомпиливать stl
(что повлечет за собой переписывание всех string-ов в проге ) не является мазой.
да и вообще вопрос был не совсем в этом --- вопрос был в том, что бы малой кровью (совсем совсем малой) сделать инсерт. Но пока все отвечали, я три раза успел забить на это (писать свой инсерт тоже ломало, так как там не только инсерт нужен).
ладно, всем спасибо, тему считать закрытой.
(что повлечет за собой переписывание всех string-ов в проге )
Я сам сейчас веду проект, написанный полностью на С другими людьми, со своими вставками на С++. У С++ вцелом и у STL в частности нормальная интегрируемость с С кодом...
Да, на счет char -а справедливо замечено
Sorry чего-то не заметил... Ну ничего, надеюсь моя лекция о высоких материях все равно пригодилась
а меня это ломало.
да и вообще -- меня все ломало.
ну а за ответы --- конечно, спасибо.
sprintf =)
Оставить комментарий
SCIF32
Вроде раньше делал, теперь вспомнить не могу и найти.строки char*.