C++ C语言中的动态分配字符串

C++ C语言中的动态分配字符串,c++,c,string,C++,C,String,在中,我做了一个相对简单的字符串问题来练习字符串,因为我在C中很难使用它们。这个问题基本上要求检查一个字符串B是否包含另一个字符串a,如果您删除“杂波”并连接其余的字符,例如“AjdhfmajBsjhfhC”中是否包含“ABC”在这种情况下是正确的 所以,我的问题是如何有效地为一个我不知道长度的字符串分配内存?我所做的是把一个字符串做成一个非常大的char-Mstring[100000],从输入中读取,然后使用strlen(Mstring)将字符串复制到一个大小合适的char数组中。比如: ch

在中,我做了一个相对简单的字符串问题来练习字符串,因为我在C中很难使用它们。这个问题基本上要求检查一个字符串B是否包含另一个字符串a,如果您删除“杂波”并连接其余的字符,例如
“AjdhfmajBsjhfhC”中是否包含
“ABC”
在这种情况下是正确的

所以,我的问题是如何有效地为一个我不知道长度的字符串分配内存?我所做的是把一个字符串做成一个非常大的
char-Mstring[100000]
,从输入中读取,然后使用
strlen(Mstring)
将字符串复制到一个大小合适的char数组中。比如:

char Mstring[100000];

scanf("%s",Mstring);
int length = strlen(Mstring);
char input[length+1]={0};
for(int i = 0; i<length;i++){
    input[i]=Mstring[i];
}
char Mstring[100000];
scanf(“%s”,Mstring);
int length=strlen(Mstring);
字符输入[length+1]={0};

对于(int i=0;i),如果您有使用C++的选项(正如您所提到的),那将使您的生活变得更加容易。然后您可以使用STL字符串(STD::String)来管理动态大小的字符串。您也可以删除旧的SCANFF()BILE,并使用STD::CIN。 例如:

#include <iostream>
#include <string>

void main()
{
    std::string sInput;
    std::getline(std::cin, sInput);

    // alternatively, you could execute this line instead:
    // std::cin >> sInput;
    // but that will tokenize input based on whitespace, so you
    // will only get one word at a time rather than an entire line
}
#包括
#包括
void main()
{
std::字符串输入;
std::getline(std::cin,sInput);
//或者,您可以执行以下行:
//标准:cin>>输入;
//但这将基于空格标记输入,因此
//一次只能得到一个单词,而不是一整行
}

描述如何管理在C++中动态增长的字符串,将需要更多的解释和注意,听起来好像你并不需要。但是,这里有一个起点:./P>我是否应该添加C++标签?只有C++工作,才会接受C++中的答案。你可以在网上解决这个问题,不是这样,但是我希望在C中能找到答案,如果可能的话,我可以用C++来做另一种方法,但是我不想问在同一个帖子中单独的问题,这就是为什么我不确定添加C++标签的原因,我想我会的。<代码>字符输入[长度+1 ]={ 0 }。谢谢。是的,在C++中是可以的,但是在C中知道如何做也很好,我会检查链接。检查数组是否需要大一些不会降低性能吗?你知道代码> STD::String < /Cube >吗?总之,一类像STD::String将使用Maloc(x)分配一些默认大小X的数组。在构造函数中。当需要扩展以容纳更多内容时,它使用realloc(Y)扩展分配空间的大小并保留原始内容。如果认为必要,它还可以使用realloc(Z)收缩其空间。