Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Массив символов


Автор: Reptor 13.6.2006, 16:43
Как задать массив строк. Пробовал так 


Код

 char mas[13][30];


mas[0]="строка1";
mas[1]="строка2";
.........................
mas[12]="строка12"


ничего не выходит


 

Автор: Tata 13.6.2006, 17:05
По-моему, надо присваивать значения строкам либо сразу при объявлении переменных, либо потом посимвольно. А так, как тут написано, он должен писать что-то вроде "Lvalue expected". 

Автор: Dray 13.6.2006, 17:22
лучше зависти массив string'ов.
Код

std::string strarr[13];
 

Автор: Reptor 13.6.2006, 18:13
Цитата

По-моему, надо присваивать значения строкам либо сразу при объявлении переменных, либо потом посимвольно. А так, как тут написано, он должен писать что-то вроде "Lvalue expected".  

Ну да он так и пишет


Dray, а можна поподробнее что то не совсем понятно. Желательно рабочий код (ну массив з данными). 

Автор: Reptor 13.6.2006, 19:20
ну что никто не поможет очень надо я уже всё перепробывал  smile  

Автор: SenkraD 13.6.2006, 20:33
А тип AnsiString не подходит? И удобнее и проще 

Автор: Voldemar2004 13.6.2006, 21:06
Reptor, в чистом - не Builder'e С++ так:
Код
#include <iostream.h>
#include <string>
#include <conio>

int main(void)
{
std::string a[5];

a[0] = "1";
a[1] = "2";
a[2] = "3";
a[3] = "4";
a[4] = "5";


for(int i=0; i<5; i++) cout << a[i] << '\n';

getch();

return 0;
}
В Buildere то же самое только тип - AnsiString:
Цитата
AnsiString is the C++Builder analog for the Delphi long string type.
А можно через "указатель на указатель на область памяти": вот не лучший способ:
Код
#include <iostream>
#include <conio>

int main(void)
{

int i=2;

int **m = (int **) new int [i][2];

m[0][0] = 1;
m[0][1] = 2;

cout << m[0][0] << '\t' << m[0][1];


getch();
return 0;
}
 А вот более безопасный и лучший способ:
Код
#include <iostream>
#include <conio>

int main(void)
{

int stroka, stolbetz;

cin >> stroka >> stolbetz;

int **a = new int *[stroka];

for(int i=0; i < stroka; i++) a[i] = new int[stolbetz];


/*

...
...
...

*/

delete[] a;

getch();
return 0;
}


Добавлено @ 21:18 
Цитата(Reptor @  13.6.2006,  17:43 Найти цитируемый пост)
Как задать массив строк.

Цитата(Reptor @  13.6.2006,  20:20 Найти цитируемый пост)
ну что никто не поможет
Ну а конкретно в С++ Builder'e: для динамического массива
Код
void __fastcall TForm1::Button1Click(TObject *Sender)
{

int n=5;

AnsiString *Stroka = new AnsiString[n];

Stroka[0] = "Строка1";
Stroka[1] = "Строка2";
Stroka[2] = "Строка3";
Stroka[3] = "Строка4";
Stroka[4] = "Строка5";

for(int i=0; i<n; i++) ShowMessage(Stroka[i]);

delete[] Stroka;

}
Для простого массива (не динамического):
Код
void __fastcall TForm1::Button1Click(TObject *Sender)
{

const n=5;

AnsiString Stroka[n];

Stroka[0] = "Строка1";
Stroka[1] = "Строка2";
Stroka[2] = "Строка3";
Stroka[3] = "Строка4";
Stroka[4] = "Строка5";

for(int i=0; i<n; i++) ShowMessage(Stroka[i]);

}

 

Автор: Tata 13.6.2006, 21:43
Ну если надо просто при создании инициализировать какими-то значениями, то можно просто попробовать так:
Код

char mas[13][30] ={"строка1","строка2",...,"строка12"};

 smile   

Автор: ksili 14.6.2006, 07:24
В самом первом посте не хватает точки с запятой в самом конце 

Автор: likehood 14.6.2006, 09:32
Tata, лучше так:
Код

const char *str[] = {
  "string1",
  "string2",
  "string3"
};
 

Автор: Reptor 14.6.2006, 14:08
Всем огромное спасибо теперь с выбором метода точно проблем не будет  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)