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

不幫助我不知道什麼向量是:/ –