C语言链表实现字符串插入:详解 insertString 函数
C语言链表实现字符串插入:详解 insertString 函数
本文将详细解析一个C语言函数 void insertString(Novel* current, char* str),该函数使用链表结构实现字符串的插入。
代码分析
以下是 insertString 函数的代码及其注释:
void insertString(Novel* current, char* str) {
int len = strlen(str); // 获取要插入的字符串的长度
int remainingSpace = MAX_SIZE - strlen(current->word); // 计算当前节点中剩余的字符空间
if (len <= remainingSpace) { // 如果要插入的字符串长度小于等于剩余空间
strcat(current->word, str); // 直接追加到当前节点的字符数组末尾
} else { // 字符串长度超出剩余空间
int splitPos = MAX_SIZE / 2; // 计算当前节点字符数组分割的位置
strncpy(current->word + strlen(current->word), str, splitPos); // 将要插入的字符串的前半部分复制到当前节点字符数组的末尾
current->word[MAX_SIZE] = '�'; // 确保字符数组末尾为终止符
Novel* newNode = createNovel(); // 创建一个新节点
newNode->Llink = current; // 将新节点的前指针指向当前节点
newNode->Rlink = current->Rlink; // 将新节点的后指针指向当前节点的后继节点
if (current->Rlink != NULL) {
current->Rlink->Llink = newNode; // 如果当前节点有后继节点,则将后继节点的前指针指向新节点
}
current->Rlink = newNode; // 将当前节点的后指针指向新节点
strncpy(newNode->word, str + splitPos, len - splitPos); // 将要插入的字符串的后半部分复制到新节点的字符数组
newNode->word[len - splitPos] = '�'; // 确保新节点字符数组末尾为终止符
}
current->pages++; // 更新当前节点的页数
current->paragraph++; // 更新当前节点的段落数
current->row++; // 更新当前节点的行数
}
功能说明
insertString 函数的功能是将一个字符串 str 插入到链表的 current 节点中。
- 首先,函数计算要插入的字符串长度
len以及当前节点剩余的存储空间remainingSpace。 - 如果
len小于等于remainingSpace,则直接使用strcat函数将字符串追加到当前节点的字符数组word的末尾。 - 如果
len大于remainingSpace,则需要进行字符串分割:- 计算分割位置
splitPos。 - 将字符串的前半部分复制到当前节点的字符数组
word中。 - 创建一个新的节点
newNode,并将字符串的后半部分复制到newNode的字符数组word中。 - 将
newNode插入到链表中,并将current节点的后指针指向newNode。
- 计算分割位置
- 最后,更新当前节点的页数、段落数和行数。
注意事项
- 代码中假设
Novel结构体定义了一个word字符数组用于存储字符串,并定义了Llink和Rlink指针用于构建链表结构。 MAX_SIZE是一个常量,表示每个节点最大可存储的字符数。createNovel()函数用于创建一个新的Novel节点,并初始化其成员变量。
总结
insertString 函数提供了一种使用链表实现字符串插入的方法,可以有效解决字符串长度溢出的问题。该函数逻辑清晰,代码简洁易懂,适合用于需要动态维护字符串数据的场景。
原文地址: https://www.cveoy.top/t/topic/23V 著作权归作者所有。请勿转载和采集!