在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等的更多准备工作,请参阅“完整面试准备课程” 。