c++动态字符串数组创建
时间: 2023-08-30 21:09:16 浏览: 256
动态字符串数组可以使用动态数组来实现,首先需要定义一个结构体来表示动态字符串数组:
```
typedef struct {
char **strings; // 存储字符串的指针数组
int size; // 当前存储的字符串数量
int capacity; // 当前容量
} StringArray;
```
其中,`strings`是一个指向指针数组的指针,存储的是字符串的指针,`size`是当前存储的字符串数量,`capacity`是当前容量。
接着,可以定义一些函数来操作这个结构体,包括创建、添加、删除、释放等:
```
// 创建一个空的动态字符串数组
StringArray *createStringArray(int capacity) {
StringArray *array = malloc(sizeof(StringArray));
array->strings = malloc(sizeof(char *) * capacity);
array->size = 0;
array->capacity = capacity;
return array;
}
// 添加一个字符串到动态字符串数组中
void addString(StringArray *array, char *str) {
if (array->size == array->capacity) {
// 如果数组已满,则扩容
array->capacity *= 2;
array->strings = realloc(array->strings, sizeof(char *) * array->capacity);
}
// 复制字符串,存储指针
array->strings[array->size++] = strdup(str);
}
// 删除指定位置的字符串
void removeString(StringArray *array, int index) {
if (index < 0 || index >= array->size) {
return; // 索引越界,直接返回
}
// 释放字符串指针内存
free(array->strings[index]);
// 将后面的字符串指针向前移动
for (int i = index + 1; i < array->size; i++) {
array->strings[i - 1] = array->strings[i];
}
array->size--;
}
// 释放动态字符串数组的内存
void freeStringArray(StringArray *array) {
for (int i = 0; i < array->size; i++) {
free(array->strings[i]);
}
free(array->strings);
free(array);
}
```
使用这些函数可以方便地创建、添加、删除和释放动态字符串数组。例如:
```
int main() {
StringArray *array = createStringArray(10);
addString(array, "hello");
addString(array, "world");
for (int i = 0; i < array->size; i++) {
printf("%s\n", array->strings[i]);
}
removeString(array, 0);
for (int i = 0; i < array->size; i++) {
printf("%s\n", array->strings[i]);
}
freeStringArray(array);
return 0;
}
```
这个例子创建了一个容量为10的动态字符串数组,添加了两个字符串,遍历输出了数组中的字符串,然后删除了第一个字符串,再次遍历输出数组中的字符串,最后释放了动态字符串数组的内存。
阅读全文