C ++将字符串输入存储为cstring

时间:2014-03-07 04:12:53

标签: c++ getline cstring

我正在进行一项任务,其中第一部分要求我们提示用户输入字符串。我们需要将此输入存储为堆上的cstring(而不是std :: string,以便我们更好地理解cstring)。我有一些工作正常:

char *input = new char[500];
cout << "enter a string: ";
cin.getline(input, 500);

但我觉得这不是一个非常好的方法来创建一个500的数组并希望它们不超过这个字符限制。有没有办法可以做到这一点,而不是制作一个可笑的大阵列,可能不会使用那么多的附近?这似乎是一种非常业余的方式。我认为使用std :: string是可能的,但我必须使用cstring :(

3 个答案:

答案 0 :(得分:1)

C方式是用malloc分配缓冲区,读取适当的字节数,并弄清楚你是否得到了整个字符串。如果你读得不够,那么你可以使用realloc扩展缓冲区,并在你离开的地方阅读更多内容。

答案 1 :(得分:0)

我们可以这样做:建立一个动态的自我缓冲。

  1. 分配堆内存(80就够了)。
  2. 您可以自己控制输入。您只能从输入中读取一个字符 每次流。如果内存的大小不够 包含这个字符,只需分配另一个字符。
  3. 当你得到角色'\ n'(或其他人)时,请停止阅读。
  4. 是的,这就是c ++库的作用!缓冲区实际上是一个队列。

答案 2 :(得分:0)

c ++提高了性能...所以这需要一个数组并指向带有指针的数组

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

int main()
{
char name[100];
//string userInput[26];
int i=0, n=0;
cout<<"your name? ";
cin>>name;
cout<<"Hello "<<name<< endl;

char *ptr=name;
for (i = 0; i < 20; i++)
{
cout<<i<<" "<<ptr[i]<<" "<<(int)ptr[i]<<endl;
}   
int length = 0;
while(name[length] != '\0')
{
    length++;
    }

            for(n=0; n<3; n++)
                    {

                if (strncmp(ptr, "r2d2", 4) == 0)
                    {
                    cout << "you found r2d2bob" << ptr[i];
                    }

        }
cout<<name <<"is"<<length<<"chars long";
}