Как одну строку в другую вставить //С++
Что значит вставить?
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 - ее размер.

Смотри 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 ");
...


в оригинальном сообщении написано char*
про STL я зняю, только вот со string ни когда не работал.

по этому не особо хотелось его юзать. Тем более ради одного раза вкомпиливать stl
(что повлечет за собой переписывание всех string-ов в проге

да и вообще вопрос был не совсем в этом

ладно, всем спасибо, тему считать закрытой.
(что повлечет за собой переписывание всех string-ов в проге )



Я сам сейчас веду проект, написанный полностью на С другими людьми, со своими вставками на С++. У С++ вцелом и у STL в частности нормальная интегрируемость с С кодом...
Да, на счет char -а справедливо замечено
Sorry


а меня это ломало.
да и вообще -- меня все ломало.
ну а за ответы --- конечно, спасибо.
sprintf =)
Оставить комментарий
SCIF32
Вроде раньше делал, теперь вспомнить не могу и найти.строки char*.