C 存储字符串输入为CString



我正在做一个分配,第一部分要求我们提示用户输入字符串。我们需要将此输入存储在堆上(不是STD :: String,以便我们可以更好地了解CSTRING)。我的东西可以正常工作:

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

,但我觉得这不是创建500阵列的好方法,并希望它们不会超过此角色限制。有什么办法可以做到这一点,而无需制作一个荒谬的大数组,并且可能不会在任何地方使用那么多?这似乎是一种非常业余的方式。我认为使用std :: string可以使用cstring :(

c的方法是用malloc分配缓冲区,读取适当的字节数,并弄清楚您是否得到了整个字符串。如果您阅读不够,则可以使用Realloc扩展缓冲区,并阅读更多您关闭的位置。

我们可以这样做:自己构建动态字符串缓冲区。

  1. Alloc a堆内存(80就足够)。
  2. 您自己控制输入。您只能从输入中读取一个字符每次流式传输。如果内存的大小不足包含这个字符,只是一个足够的一个。
  3. 当您获得字符' 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] != '')
{
    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";
}

最新更新