
12.4. Преобразования строковых типов.
а) Преобразование из массива char в String и наоборот.
Как упоминалось выше, для преобразования массива char к типу String достаточно просто присвоить его переменной типа String:
char c[]="Привет!";
String s=c;
Обратное же преобразование автоматически не делается. Для его осуществления используется метод c_str() типа String. Он создает временный массив char, который создается только на время выполнения оператора, содержащего этот метод:
s=Edit1->Text;
WinExec(s.c_str(), SW_SHOW);
// WinExec - запуск программы с заданным именем
// Функция WinExec требует, чтобы имя было массивом char
Если же нужно использовать полученный массив char в последующей программе, его надо скопировать в "постоянный" (объявленный) массив char :
char a[100];
strcpy(a, s.c_str());
Таким образом, для ввода массивов char в оконных приложениях необходимо использовать функцию strcpy и метод c_str() :
char a[100];
strcpy(a, Edit1->Text.c_str());
б) Преобразование из String в простую переменную типа char.
При таком присваивании нужно указать номер символа в строке, который будет присвоен:
String s='*';
char c=s[1];
Обратное же присваивание не вызывает трудностей:
char c='*';
String s=c;
в) Преобразование String и числовых типов.
Функции преобразования были описаны выше в теме "Функции ввода-вывода, Ввод-вывод в оконных приложениях":
String IntToStr(int x); - int String
int StrToInt(String S); - String int
double StrToFloat(String S); - String double
String FloatToStr(double x); - double String
String FloatToStrF(double x, Format, int p, int d);
- double String с указанием формата и точности.
Пример 1:
String s="123";
int i=StrToInt(s); // i=123; автоматического
// преобразования String в тип int не происходит
// (хотя наоборот - происходит)
Пример 2: Вывести в одну строку Memo1 переменные N1 и N2 типа int, разделяя их пробелом:
Memo1->Lines->Add(IntToStr(N1)+" "+IntToStr(N2));
// явное преобразование типов необходимо,
// иначе знак + не был бы истолкован по типу String
12.5. Тип String в консольных приложениях.
В консольном приложении использование типа String требует подключения библиотек (достаточно библиотеки vcl):
#include<vcl.h>
(Эта строчка может быть добавлена автоматически).
Для консольного ввода-вывода String должен быть преобразован в массив char и/или наоборот (см. выше). В частности, ввод с консоли лучше производить вначале во вспомогательный массив char, а уже оттуда (если нужно) - в String.
Задача 9. Во введенной с консоли строке заменить все пробелы на символы подчеркивания, используя тип String.
#include<vcl.h>
#include<stdio.h>
#include<conio.h>
void main(){
String t;
int i;
puts("Vvedite stroku s probelami:");
char s[100];
gets(s);
t=s;
for(i=1; i<=t.Length(); i++)
if (t[i]==' ') t[i]='_';
puts(t.c_str());
getch();
}