将字符串读入动态分配的数组

时间:2013-12-21 13:33:52

标签: c++

我正在尝试用户在动态分配的字符串数组中获取值。我正在尝试使用for / while - 循环,以便每当用户输入字符串"!"时,字符串的读取就会结束。

#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++;
    }

2 个答案:

答案 0 :(得分: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';

答案 1 :(得分: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