C++ C++;将字符串输入存储为cstring
我正在做一个作业,第一部分要求我们提示用户输入字符串。我们需要将此输入存储为堆上的cstring(而不是std::string),以便更好地理解cstring。我有一些很好用的东西:C++ C++;将字符串输入存储为cstring,c++,getline,cstring,C++,Getline,Cstring,我正在做一个作业,第一部分要求我们提示用户输入字符串。我们需要将此输入存储为堆上的cstring(而不是std::string),以便更好地理解cstring。我有一些很好用的东西: char *input = new char[500]; cout << "enter a string: "; cin.getline(input, 500); char*input=新字符[500]; coutC方法是使用malloc分配缓冲区,读取适当的字节数,并确定是否得到整个字符串。如果您读
char *input = new char[500];
cout << "enter a string: ";
cin.getline(input, 500);
char*input=新字符[500];
coutC方法是使用malloc分配缓冲区,读取适当的字节数,并确定是否得到整个字符串。如果您读得不够多,那么可以使用realloc扩展缓冲区,并在您停止的地方阅读更多内容。我们可以这样做:自己构建动态字符串缓冲区
分配堆内存(80就足够了)
您可以自己控制输入。您只能从输入中读取一个字符
每次流。如果内存大小不足以
包含此字符,只需分配另一个足够的字符李>
当您得到字符“\n”(或其他)时,请停止阅读
是的,这就是C++库所做的!缓冲区实际上是一个队列。
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";
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符名[100];
//字符串userInput[26];
int i=0,n=0;
coutname;
如果您不指定大小,堆如何知道它应该为您的字符分配多少空间?它将在此处为500个字符分配空间,并确保此空间不会被其他应用程序占用。std::string
的方法可能是分配一个较小的缓冲区,然后在填充后重新分配和复制s up,并且可能重复和重新分配多次,直到没有更多的字符可读取。您可以这样实现它,但不值得这么麻烦。现在500字节的空间不太大。std::string
会自动调整自身大小以适应,因此显然它会更易于使用。一般来说你所做的是关于你在不知道输入大小的情况下能做得多好,从而更精确。如果你想节省整体空间,你可以填充你的缓冲区,然后找到它的大小,并制作另一个正好相同大小的数组,将你的缓冲区复制到该数组,然后释放缓冲区。你必须检查failbit
如果已设置,则启动一个新的缓冲区。std::string
可能会执行类似操作。如果知道输出可能很大,则使用std::string
和reserve
方法。