📜  C++中的字符串数组(5种不同的创建方式)

📅  最后修改于: 2021-05-30 18:12:13             🧑  作者: Mango

在C和C++中,字符串是一维字符数组,而在C中,字符串数组是字符二维数组。声明它们的方法有很多,这里提供了一些有用的方法。

1.使用指针:

实际上,我们通过创建指针数组来创建字符串字面量数组。

C和C++都支持此功能。

CPP
// C++ program to demonstrate array of strings using
// 2D character array
#include 
 
int main()
{
    // Initialize array of pointer
    const char *colour[4] = { "Blue", "Red",
                             "Orange", "Yellow" };
 
    // Printing Strings stored in 2D array
    for (int i = 0; i < 4; i++)
        std::cout << colour[i] << "\n";
 
    return 0;
}


CPP
// C++ program to demonstrate array of strings using
// 2D character array
#include 
 
int main()
{
    // Initialize 2D array
    char colour[4][10] = { "Blue", "Red", "Orange",
                           "Yellow" };
 
    // Printing Strings stored in 2D array
    for (int i = 0; i < 4; i++)
        std::cout << colour[i] << "\n";
 
    return 0;
}


CPP
// C++ program to demonstrate array of strings using
// array of strings.
#include 
#include 
 
int main()
{
    // Initialize String Array
    std::string colour[4] = { "Blue", "Red",
                              "Orange", "Yellow" };
 
    // Print Strings
    for (int i = 0; i < 4; i++)
        std::cout << colour[i] << "\n";
}


CPP
// C++ program to demonstrate vector of strings using
#include 
#include 
#include 
 
int main()
{
    // Declaring Vector of String type
    // Values can be added here using initializer-list syntax
    std::vector colour {"Blue", "Red", "Orange"};
 
    // Strings can be added at any time with push_back
    colour.push_back("Yellow");
 
    // Print Strings stored in Vector
    for (int i = 0; i < colour.size(); i++)
        std::cout << colour[i] << "\n";
}


C++
#include 
#include 
#include 
 
int main()
{
    // Initialize array
    std::array colour { "Blue", "Red", "Orange",
                                     "Yellow" };
 
    // Printing Strings stored in array
    for (int i = 0; i < 4; i++)
        std::cout << colour[i] << "\n";
 
    return 0;
}


输出:
Blue
Red
Orange
Yellow


  • 字符串数是固定的,但不是必须的。可以省略4,编译器将计算正确的大小。
  • 这些字符串是常量,不能更改其内容。由于字符串字面量(从字面上看,用引号引起来的字符串)存在于内存的只读区域中,因此我们必须在此处指定“ const”以防止可能导致程序崩溃的不必要访问。

2.使用2D阵列:

当所有字符串的长度已知并且需要特定的内存占用空间时,此方法很有用。字符串空间将在单个块中分配

C和C++均支持此功能。

CPP

// C++ program to demonstrate array of strings using
// 2D character array
#include 
 
int main()
{
    // Initialize 2D array
    char colour[4][10] = { "Blue", "Red", "Orange",
                           "Yellow" };
 
    // Printing Strings stored in 2D array
    for (int i = 0; i < 4; i++)
        std::cout << colour[i] << "\n";
 
    return 0;
}
输出:
Blue
Red
Orange
Yellow


  • 这两个字符串的字符串的数量和大小是固定的。同样,可以忽略4,而编译器将计算适当的大小。但是,必须指定第二维(在这种情况下为10),以便编译器可以选择适当的内存布局。
  • 每个字符串都可以修改,但会占用第二维给出的全部空间。每个都将在内存中紧挨着布置,并且不能更改大小。
  • 有时,需要控制内存占用量,这将分配具有固定规则布局的内存区域。

3.使用字符串类:

STL字符串类可用于创建可变字符串数组。在这种方法中,字符串的大小不是固定的,并且可以更改字符串。

仅C++支持此功能,因为C没有类。

CPP

// C++ program to demonstrate array of strings using
// array of strings.
#include 
#include 
 
int main()
{
    // Initialize String Array
    std::string colour[4] = { "Blue", "Red",
                              "Orange", "Yellow" };
 
    // Print Strings
    for (int i = 0; i < 4; i++)
        std::cout << colour[i] << "\n";
}
输出:
Blue
Red
Orange
Yellow


  • 数组的大小是固定的,但不是必须的。同样,此处的4可以省略,编译器将确定数组的适当大小。字符串也是可变的,允许对其进行更改。

4.使用向量类:

STL容器Vector可用于动态分配大小可变的数组。

这仅在C++中可用,因为C没有类。请注意,此处的initializer-list语法需要支持2011 C++标准的编译器,尽管您的编译器很有可能支持,但需要注意。

CPP

// C++ program to demonstrate vector of strings using
#include 
#include 
#include 
 
int main()
{
    // Declaring Vector of String type
    // Values can be added here using initializer-list syntax
    std::vector colour {"Blue", "Red", "Orange"};
 
    // Strings can be added at any time with push_back
    colour.push_back("Yellow");
 
    // Print Strings stored in Vector
    for (int i = 0; i < colour.size(); i++)
        std::cout << colour[i] << "\n";
}
输出:

Blue
Red
Orange
Yellow


  • 向量是动态数组,可让您随时添加和删除项。
  • 向量中可以使用任何类型或类,但是给定的向量只能包含一种类型。

5.使用数组类:

STL容器数组可用于分配固定大小的数组。它的用法可能与矢量非常相似,但是大小始终是固定的。

仅在C++中支持此功能。

C++

#include 
#include 
#include 
 
int main()
{
    // Initialize array
    std::array colour { "Blue", "Red", "Orange",
                                     "Yellow" };
 
    // Printing Strings stored in array
    for (int i = 0; i < 4; i++)
        std::cout << colour[i] << "\n";
 
    return 0;
}
输出
Blue
Red
Orange
Yellow

笔记:

这些绝不是构成字符串集合的唯一方法。 C++提供了几个容器类,每个容器类都具有不同的权衡和功能,所有这些容器类的存在都是为了满足您在项目中的要求。探索并享受乐趣!

结论:在所有方法中,Vector似乎是在C++中创建字符串数组的最佳方法。

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”