C++字符串字符**翻译

C++ string char** translation

本文关键字:翻译 字符 字符串 C++      更新时间:2023-10-16

如何使用char**生成n个字符串的数组?

char** lit;
*lit = (char*)calloc(this->nr_param, sizeof(char*));
for(int i = 0; i < this->nr_param; i++)
      lit[i] = (char*) calloc(this->nr_param, sizeof(char));    

这是路吗?如果是,我如何访问元素?假设我的数组将包含以下元素:aaab,abba,baab;

我想要这种结构:

lit[0] = "aaab";
lit[1] = "abba";
lit[2] = "baab"; 

我怎么申报没关系?

像这样:

// allocate memory for n char pointers dynamically.
char ** lit = static_cast<char**>(::operator new(n * sizeof(char*)));
for (unsigned int i = 0; i != n; ++i)
{
    lit[i] = static_cast<char*>(::operator new(length_of_string_i)); // #1
    // populate lit[i] with data
}

您需要某种方法来确定第i个字符串的长度,需要将其适当地粘贴到标记为#1的行中。注意sizeof(char) == 1,所以您不需要在内部分配中乘以任何东西。(如果您愿意,可以使用std::malloc而不是::operator new,但您必须使用#include <cstdlib>。)完成后不要忘记清理!

当然,这只是你所要求的文字翻译。在C++中,您通常更喜欢对象创建而不是原始内存分配,如下所示:

// construct n char pointers dynamically
char ** lit = new char*[n];
for (unsigned int i = 0; i != n; ++i)
{
    lit[i] = new char[length_of_string_i];
    // populate lit[i] with data
}

但你应该认真的永远不要使用数组new。这不是一个好的概念,也很少是好的C++。

所以,你根本不应该这样做,相反,你应该使用:

std::vector<std::string> lit(n);

您可以以类似的方式使用c++向量和字符串:

  #include <vector>
  #include <string>
  #include <iostream>
  int main() {
    std::vector<std::string> lit;
    lit.push_back("aaab");
    lit.push_back("aab");
    lit.push_back("aabb");
    lit[0][0] = 'z';
    std::cout << lit[0] << std::endl;
  }