我正在进行一项任务,其中第一部分要求我们提示用户输入字符串。我们需要将此输入存储为堆上的cstring(而不是std :: string,以便我们更好地理解cstring)。我有一些工作正常:
char *input = new char[500];
cout << "enter a string: ";
cin.getline(input, 500);
但我觉得这不是一个非常好的方法来创建一个500的数组并希望它们不超过这个字符限制。有没有办法可以做到这一点,而不是制作一个可笑的大阵列,可能不会使用那么多的附近?这似乎是一种非常业余的方式。我认为使用std :: string是可能的,但我必须使用cstring :(
答案 0 :(得分:1)
C方式是用malloc分配缓冲区,读取适当的字节数,并弄清楚你是否得到了整个字符串。如果你读得不够,那么你可以使用realloc扩展缓冲区,并在你离开的地方阅读更多内容。
答案 1 :(得分:0)
我们可以这样做:建立一个动态的自我缓冲。
是的,这就是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";
}