2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 C++Builder Строки
Сообщение17.05.2011, 17:58 
Есть 2 строки. Есть номера нужных символов в одной из строк. Как эти символы добавить в конец 2-й строки.

 
 
 
 Re: C++Builder Строки
Сообщение17.05.2011, 19:05 
Нажать на F1 и искать подходящие функции, операторы.

 
 
 
 Re: C++Builder Строки
Сообщение17.05.2011, 19:55 
Спасибо, я не то и не там искал. Надо было именно оператор.

 
 
 
 Re: C++Builder Строки
Сообщение17.05.2011, 21:33 
Аватара пользователя
Не стоит метаться по форумам в поисках ответов на столь простые вопросы. Воспользуйтесь лучше поисковой программой и найдите книжку Архангельский А.Я. Программирование в С++Builder 6. Книга толстая, а в конце содержит справочник по функциям, классам, методам. Найдёте там функции обработки строк. А ответ на ваш вопрос, вообще говоря, зависит от того, как именно вы собираетесь организовать строки: в Builder это можно сделать как в Си массивами типа char, можно использовать тип AnsiString, можно использовать также и Delphi - строки типа String. Так что для начала определитесь какой тип у вас будут иметь строки, а потом смотрите в справочнике соответствующие функции по их обработке. Кстати, в классе AnsiString реализованы и методы, позволяющего выполнять операции над строками.

 
 
 
 Re: C++Builder Строки
Сообщение18.05.2011, 10:15 
Компилятор выделяет данную строку
Код:
for(j=i+k;j>=i;j--) {strcat(s,s0[j]);c++;}

Ошибка:
Несоответствие типов
wanted const char, got char

(Оффтоп)

в Архангельском смотрел в первую очередь

 
 
 
 Re: C++Builder Строки
Сообщение18.05.2011, 13:49 
Аватара пользователя
Код:
char s[100];
char s0[100];
...
for(int j=i+k; j>=i; j--)
{
char sj[2] = {' ','\n'};
sj[0]=s0[j];
strcat(s,sj);
c++;
}

 
 
 
 Re: C++Builder Строки
Сообщение18.05.2011, 14:12 
profrotter в сообщении #447190 писал(а):
Код:
char s[100];
char s0[100];
...
for(int j=i+k; j>=i; j--)
{
char sj[2] = {' ','\n'};
sj[0]=s0[j];
strcat(s,sj);
c++;
}


Спасибо.

(Оффтоп)

что прозе:иметь функцию для присоединения символа к строке или писать так как вы?Вообще я поискал и для AnsiString вроде нет прямо присоединения символа

 
 
 
 Re: C++Builder Строки
Сообщение18.05.2011, 16:54 
Аватара пользователя

(Оффтоп)

Делать или не делать отдельную функцию для присоединения символа - вопрос удобства. Я уже давно не программировал, если мне не изменяет память, для Ansistring определена операция сложения строк (одна строка дописывается в конец другой) и есть функция, которая позволяет выделять подстроку с такой-то позиции по такую-то. Можно у одной стороки выделить подстроку (если требуется и один символ) и прибавить к другой

 
 
 
 Re: C++Builder Строки
Сообщение19.05.2011, 17:00 
2profrotter
Вы там наверное имели ввиду \0 вместо \n?

Да и вообще, для добавления одиночных символов, использовать strcat смысла нет. Лучше как-то так:
Используется синтаксис C
char s[100];
char s0[100];
...
L=strlen(s);
for(int j=i+k; j>=i; j--)
{
    s[L++]=s0[j];
    s[L]=0;
    ...
}
 


20n0
Я бы посоветовал, в первую очередь, не ориентироваться на C++ Builder (на всякие AnsiString'и), а руководствоваться стандартом C++ или книжкой Страуструпа.

Если вы хотите написать код на C, то учтите, что для добавления символов к строке необходимо предварительно выделить дополнительную память, то есть увеличить длину строки (или заранее предусмотреть лишнее место, как в примере profrotter'а; правда в последнем случае вам придется ещё и возможное переполнение контролировать).

По теме. В C++ есть стандартный класс std::string, который умеет склеивать строки; но это так, на случай если захочется именно C++, а не C-решение иметь.

-- Чт май 19, 2011 20:45:08 --

Пример для C++:
Используется синтаксис C++
#include <iostream>
#include <string>
...
std::string s="test";
s+='a';
std::cout << s;
 


Тот же эффект может быть достигнут как std::cout << s+'a' или методами append или push_back.

Ещё можно воспользоваться C++ IO-потоками, а именно классом std::ostringstream:
Используется синтаксис C++
#include <iostream>
#include <string>
#include <sstream>
...
std::string s="test";
std::ostringstream Stream;
Stream << s << 'a';
std::cout << Stream.str();
 

 
 
 
 Re: C++Builder Строки
Сообщение19.05.2011, 18:08 
Аватара пользователя
Circiter в сообщении #447579 писал(а):
Вы там наверное имели ввиду \0 вместо \n?

Виноват. Уже года два наверное не программировал.

 
 
 [ Сообщений: 10 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group