2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 C++Builder Строки
Сообщение17.05.2011, 17:58 


06/01/11
63
Есть 2 строки. Есть номера нужных символов в одной из строк. Как эти символы добавить в конец 2-й строки.

 Профиль  
                  
 
 Re: C++Builder Строки
Сообщение17.05.2011, 19:05 


03/10/06
826
Нажать на F1 и искать подходящие функции, операторы.

 Профиль  
                  
 
 Re: C++Builder Строки
Сообщение17.05.2011, 19:55 


06/01/11
63
Спасибо, я не то и не там искал. Надо было именно оператор.

 Профиль  
                  
 
 Re: C++Builder Строки
Сообщение17.05.2011, 21:33 
Модератор
Аватара пользователя


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

 Профиль  
                  
 
 Re: C++Builder Строки
Сообщение18.05.2011, 10:15 


06/01/11
63
Компилятор выделяет данную строку
Код:
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 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево
Код:
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 


06/01/11
63
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 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево

(Оффтоп)

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

 Профиль  
                  
 
 Re: C++Builder Строки
Сообщение19.05.2011, 17:00 
Заслуженный участник


26/07/09
1559
Алматы
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 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево
Circiter в сообщении #447579 писал(а):
Вы там наверное имели ввиду \0 вместо \n?

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group