Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / помогите склеить две строки / 25 сообщений из 26, страница 1 из 2
13.08.2015, 14:10
    #39028658
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
всем привет!

помогите пожалуйста склеить строки

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void myfunc() {
char *s1;
char *s2;
char *s3;

s1 = "s1";
s2 = "s2";

s3 = "bla bla"+s1+s2;

}
...
Рейтинг: 0 / 0
13.08.2015, 14:23
    #39028681
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
поменяй "char*" на "AnsiString".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.08.2015, 14:52
    #39028713
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Dimitry Sibiryakov,

для AnsiString нужно подключать vcl.h, можно без этого как то обойтись ?
...
Рейтинг: 0 / 0
13.08.2015, 15:04
    #39028728
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Mandarinдля AnsiString нужно подключать vcl.h, можно без этого как то обойтись ?
Можно подключить <strings> и делать то же с std::string.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13.08.2015, 15:32
    #39028773
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Dimitry Sibiryakov,

в что будет работать быстрее,

Код: plaintext
1.
2.
 sprintf(TmpStr,"%s%s%s","UID=",UserName,";");
 strcat(ConStr,TmpStr);



или AnsiString + AnsiString

?
...
Рейтинг: 0 / 0
13.08.2015, 15:49
    #39028831
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Mandarin,

Быстрее будет работать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void myfunc() {
char *s1;
char *s2;
char *s3;

s1 = "s1";
s2 = "s2";

s3 = "bla bla"+s1+s2;
}



Оно будет вообще очень быстро работать, за O(1).
...
Рейтинг: 0 / 0
13.08.2015, 15:51
    #39028833
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Mandarin,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
void __fastcall TForm1::Button1Click(TObject *Sender) {
 AnsiString s1 = "s1";
 AnsiString s2 = "s2";
 AnsiString s3;
 int i = 0;
 int t = GetTickCount();
 while (i < 10000000) {

  s3 = s1 + "_" + s2;
  i++;
 }
 ShowMessage(GetTickCount()-t);
}
// ---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender) {
 char s1[10] = "s1";
 char s2[10] = "s2";
 char *s3 = new char[22];
 int i = 0;
 int t = GetTickCount();
 while (i < 10000000) {
  sprintf(s3, "%s%s%s", s1, "_", s2);
  i++;
 }
 ShowMessage(GetTickCount()-t);

}



результат AnsiString 5117 ms
результат char 1498 ms

я что то сделал не так или Вы посоветовали не самый хороший вариант?
...
Рейтинг: 0 / 0
13.08.2015, 15:52
    #39028836
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
MasterZivMandarin,

Быстрее будет работать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void myfunc() {
char *s1;
char *s2;
char *s3;

s1 = "s1";
s2 = "s2";

s3 = "bla bla"+s1+s2;
}



Оно будет вообще очень быстро работать, за O(1).

[bcc32 Error] Unit1.cpp(56): E2085 Invalid pointer addition
Full parser context
Unit1.cpp(48): parsing: void _fastcall TForm1::Button3Click(TObject *)
...
Рейтинг: 0 / 0
13.08.2015, 16:04
    #39028850
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Mandarin,

А так ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void myfunc() {
char *s1;
char *s2;
char *s3;

s1 = "s1";
s2 = "s2";

s3 = "bla bla"+(int)s1+(int)s2;

}
...
Рейтинг: 0 / 0
13.08.2015, 16:14
    #39028859
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
MasterZivMandarin,

А так ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void myfunc() {
char *s1;
char *s2;
char *s3;

s1 = "s1";
s2 = "s2";

s3 = "bla bla"+(int)s1+(int)s2;

}



[bcc32 Error] Unit1.cpp(70): E2034 Cannot convert 'const char *' to 'char *'
Full parser context
Unit1.cpp(48): parsing: void _fastcall TForm1::Button3Click(TObject *)
...
Рейтинг: 0 / 0
13.08.2015, 16:15
    #39028861
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Mandarinрезультат AnsiString 5117 ms
результат char 1498 ms
strcpy()/strcat() быстрее sprintf() должен работать. Только не забывай память освобождать.
...
Рейтинг: 0 / 0
13.08.2015, 16:33
    #39028877
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Dima T,

спасибо
...
Рейтинг: 0 / 0
13.08.2015, 16:48
    #39028903
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Mandarin,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void __fastcall TForm1::Button4Click(TObject *Sender)
{
 char s1[10] = "s1";
 char s2[10] = "s2";
 char *s3;
 int i = 0;
 int t = GetTickCount();
 while (i < 10000000) {
  s3 = "";
  strcat(s3,s1);
  strcat(s3,"_"); // почему на этой строке вываливается ошибка AV ?
  strcat(s3,s2);
  //delete[]s3; как почистить память, вернуть s3 в исходное состояние?
  i++;
 }
 ShowMessage(GetTickCount()-t);
}
...
Рейтинг: 0 / 0
13.08.2015, 17:30
    #39028948
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Mandarin,

Ну прочитай ты учебник в конце концов. Это совсем не сложно.

MasterZiv, кончай издеваться над неучем.
...
Рейтинг: 0 / 0
13.08.2015, 18:46
    #39029001
Mandarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
White Owl,

читаю... если читать учебник и внимать подсказкам с форума, обучение будет быстрее в два раза, я эти круги ада уже проходил когда Delphi учил.
...
Рейтинг: 0 / 0
13.08.2015, 19:54
    #39029029
Зимаргл
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
White OwlMandarin,
....

MasterZiv, кончай издеваться над неучем.
Видимо он устал.. =)

Кстати, как выяснилось, сложение строк очень нетривиальная операция. Откуда поехали всякие иммутабли и стрингбилдеры
...
Рейтинг: 0 / 0
16.08.2015, 09:15
    #39030192
bdm77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Mandarinвсем привет!

помогите пожалуйста склеить строки

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void myfunc() {
char *s1;
char *s2;
char *s3;

s1 = "s1";
s2 = "s2";

s3 = "bla bla"+s1+s2;

}



Я так понимаю это дом задание и ничем пользоваться нельзя,
вам надо написать собственную ф-ию strcat ?
...
Рейтинг: 0 / 0
16.08.2015, 14:05
    #39030266
Владимир2012
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Mandarin
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void __fastcall TForm1::Button4Click(TObject *Sender)
{
 char s1[10] = "s1";
 char s2[10] = "s2";
 char *s3;
 int i = 0;
 int t = GetTickCount();
 while (i < 10000000) {
  s3 = "";
  strcat(s3,s1);
  strcat(s3,"_"); // почему на этой строке вываливается ошибка AV ?
  strcat(s3,s2);
  //delete[]s3; как почистить память, вернуть s3 в исходное состояние?
  i++;
 }
 ShowMessage(GetTickCount()-t);
}



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
void __fastcall TForm1::Button4Click(
 TObject  *Sender
) {

 char  s1[ 10 ] = "s1";
 char  s2[ 10 ] = "s2";
 char  *s3;

 int   i        = 0;
 int   t        = GetTickCount();

 while ( i < 10000000 ) {

  s3 = "";

  strcat( s3, s1  );
  strcat( s3, "_" );                                       // Почему на этой строке вываливается ошибка AV?
  strcat( s3, s2  );
  
  i++;                                                     // delete[] s3; как почистить память, вернуть s3 в исходное состояние?

 }                                                         // while ( i < 10000000 ) {

 ShowMessage( 
  GetTickCount() - t 
 );

}                                                          // void __fastcall TForm1::Button4Click(
...
Рейтинг: 0 / 0
16.08.2015, 14:13
    #39030270
Владимир2012
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Нет все же у меня "норма" - следующий стиль оформления кода

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
void __fastcall TForm1::Button4Click(
 TObject  *Sender
) {
                                                           //
 char  s1[ 10 ] = "s1";                                    //
 char  s2[ 10 ] = "s2";                                    //
 char  *s3;

 int   i        = 0;                                       //
 int   t        = GetTickCount();                          //

// ----------------
//
 while ( i < 10000000 ) {

  s3 = "";

  strcat( s3, s1  );
  strcat( s3, "_" );                                       // Почему на этой строке вываливается ошибка AV?
  strcat( s3, s2  );
  
  i++;                                                     // delete[] s3; как почистить память, вернуть s3 в исходное состояние?

 }                                                         // while ( i < 10000000 ) {

 ShowMessage( 
  GetTickCount() - t 
 );

}                                                          // void __fastcall TForm1::Button4Click(
...
Рейтинг: 0 / 0
16.08.2015, 20:20
    #39030389
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Mandarin
Код: plaintext
1.
2.
3.
  s3 = "";
  strcat(s3,s1);  // Странно что тут ошибки нет
  strcat(s3,"_"); // почему на этой строке вываливается ошибка AV ?


иди книжки читай, или бросай это грязное дело.
...
Рейтинг: 0 / 0
16.08.2015, 21:58
    #39030404
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Знавал я минимум 2 челов которые засыпавшись на ASCIZ строках и играх с указателями
оставили программирование и мирно занимаются торговлей комплектующими. Мдя...
Вот в таком вот аспекте...
...
Рейтинг: 0 / 0
17.08.2015, 10:06
    #39030572
bdm77
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
...
Рейтинг: 0 / 0
24.08.2015, 21:37
    #39035184
Jurijus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Mandarin,
Вот быстро и кота или string не надо.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include <iostream>
using namespace std;
int main()
{
char s1[5]="abcd";
char a1[2]="a",b1[2]="b",
c1[2]="c",d1[2]="d";
s1[0]=a1[0];
s1[1]=b1[0];
s1[2]=c1[0];
s1[3]=d1[0];
cout<<s1<<endl;
system("pause"); 
]return 0;
}
...
Рейтинг: 0 / 0
24.08.2015, 22:18
    #39035194
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Jurijus, пользуйся предварительным просмотром или подфорумом
Тест для проверки дизайна исходника. Дублей делать не надо.
...
Рейтинг: 0 / 0
24.08.2015, 22:22
    #39035199
Jurijus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите склеить две строки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include <iostream>
using namespace std;
int main()
{
int i;
char s1[99999];
char a1[2]="a";
for(i=0;i<100000; i++)
{
s1[i]=a1[0];
}
cout<<s1<<endl;
system("pause"); 
return 0;
}
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / помогите склеить две строки / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]