2013-12-21 5 views
-5

Я пытаюсь получить значения пользователем в динамически распределенном массиве строк. И я пытаюсь использовать for/while -loop таким образом, чтобы чтение строки заканчивалось всякий раз, когда пользователь вводит строку "!".Чтение строк в динамически выделенный массив

#include<iostream> 
#include<string> 
#include<string.h> 
using namespace std; 

int main() 
{ 
    int b=1; 
    int top=0; 
    string * a=new string[b] ; 
    cin>>a[b]; 
    top++; 
    while(a[b]!="!") 
    { 
     if(top==b) 
      b++; 
     cin>>a[b]; 
     top++; 
    } 
+4

Вы выделенное пространство для одного целого. Затем вы сразу же получаете доступ к элементу за концом и продолжаете дальше. – chris

+2

Вы должны попытаться задать вопрос. – juanchopanza

+0

+ chris посмотреть его сейчас –

ответ

0

Это будет сделано проще, если вы будете использовать стандартный класс std :: string. Если говорить о символьных массивах, то подход состоит в том, чтобы выделить массив символов фиксированного размера. Когда будет введено больше символов, чем размер массива, перераспределите массив, увеличивая его размер и скопируйте элементы текущего массива в новом.

Например

const size_t N = 10; 

char *s = new char[N]; 

char c; 
size_t size = N; 
size_t i = 0; 

while (std::cin >> c && c != '!') 
{ 
    if (i == size - 1) 
    { 
     char *p = new char[size + N]; 
     std::copy(s, s + size - 1, p); 
     delete []s; 
     s = p; 
     size += N; 
    } 

    s[i++] = c; 
} 
    . 

s[i] = '\0'; 
+0

Я хочу использовать его как строку не как char –

+0

Нет смысла динамически выделять объект типа std :: string в вашем случае. std :: string сама динамически выделяет память. Также я вижу, что вы изменили исходный пост. –

+0

Beacuse Я хочу несколько строк в массиве –

0

Реагирования на название вопроса,

“ Я хочу, чтобы получить значение пользователя в динамическом выделенной строке массиве, используя для цикла или во время цикла она закончится когда пользователь вводит «!». ”

std::string хороший способ, чтобы получить динамически выделенную строку, с автоматическим распределением и освобождением буфера.

std::vector - хороший общий массив динамических размеров.

Таким образом, вы можете попробовать что-то вроде этого (вне кода манжеты):

using namespace std; 
vector<string> lines; 
for(;;) 
{ 
    string line; 
    getline(cin, line); 
    if(line == "!") { break; } 
    lines.push_back(line); 
} 
// Do something with the lines 
+0

не помогло Я не знаю, что такое вектор: / –

Смежные вопросы