2013-12-21 87 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

因为我想要数组中的多个字符串 –

0

年对问题的标题,

“我想通过用户动态分配的字符串数组使用for循环或while循环它将结束得到的值当用户输入“!”时”

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

不帮助我不知道什么向量是:/ –