Подскажите пожалуйста, как обьявлять массив из строк в С++, чтобы к строкам можно было обращаться образом вроде A[i]?
Следующие способы не срабатывают:
string A[N];
или
vector< string > a(N);
UPD: Понял и осознал. Спасибо всем, кто ответил.
PS: Спасибо за минусы:D
Оба этих способа работают. Что именно не получается, какие конкретные ошибки появляются?
Если написать cout<<A[i], ничего не произодйдет. Сортировать как sort(A,A+N,comparator) тоже не хочет(точнее, сортирует как-то, но если вывести все элементы, выведет какой-то бред)
код в студию
можно еще динамические массивы посоздавать, если эти, вполне рабочие способы не устраивают. Или вообще добавлять в map)
А vector< string > a(N); не динамический?
Поясню. Я о способе который предполагает написание руками слова new.
vector<string> a(N, string(n, ' '));
может такого хочется?А что это?
ну по дефолту в массив кладутся пустые строки, а так будут длины n, заполненные пробелами
И не говорите, что это не работает.
А вот так вот делать, как я понял, нельзя:
string A[N];
for(long i = 0; i < K; i++) cin>>A[1][i];
Формально можно. Здесь проблема не в том, что это в принципе делать нельзя, а в том, что у вас получается выход за пределы массива (строки, в данном случае), так как это считывание символов не изменяет размер строки. А в данном примере строки изначально нулевого размера.
Если бы было что-то вроде
A[1]="1111111111111111111111111111111111111111111111111111111111111"; for (int i=0;i<K;i++)cin>>A[1][i];
то такой код будет работать при не слишком больших К (он будет считывать символы и заменять единицы в оригинальной строке на эти символы).
upd: рабочая версия вашего кода может выглядеть, к примеру, так:
char c; for (int i=0;i<k;i++){cin>>c;A[1]+=c;}
Спасибо!
Чтение данных до первого пробельного символа:
Чтение данных до конца строки:
Если уж очень хочется добавлять символы по одному, то тогда так, как написал I_love_Tanya_Romanova. Во всех случаях
string
сам выделит столько памяти, сколько нужно.И еще. string A[N];
Проблема в том, что нельзя задавать размер статического массива переменной, нужно только константой, то есть только так:
string A[1000]; либо const int N = 1000; string A[N];
это потому что память, под этот массив выделяется на этапе компиляции, а не во время выполнения программы как вы хотите.
По поводу размера статических массивов, тут есть одна оговорка: по стандарту C99 языка Си можно задавать локальные массивы переменной длины. В частности, в GNU C++ такая фича поддерживается(но не в MSVC). Источник
Это так, вдруг кто не знает.