字符串操作可谓是常见中的常见,usual中的usually,不好意思先秀一把英文。
使用C语言数组实现字符串的操作,还是便于兄弟们理解字符串在内存中的组织与操作的。
代码如下,精华都在注释中
#include <stdio.h>
#define MAX_LENGTH 100
/*
* 主题:使用数组实现字符串操作实例
* 作者:熊猫大大
* 时间:2020-01-15
*/
//字符串结构体
typedef struct{
char content[MAX_LENGTH];//内容部分,最后一位存储'\0',所以实际字符串内容长度是MAX_LENGTH-1
int length;//实际长度
}String;
//打印字符串
void printStr(String *str)
{
printf("str:%s\n",str->content);
}
//请空字符串
void clearStr(String *str)
{
str->content[0] = '\0';
str->length = 0;
}
//返回字符串长度
int getStrLength(String *str)
{
return str->length;
}
//判断字符串是否为空 是1 否0
int isEmpty(String *str)
{
if (str->length == 0)
{
return 1;
}
else
{
return 0;
}
}
//添加字符
int appendChar(String *str,char c)
{
if (str->length < MAX_LENGTH - 1)
{
str->content[str->length] = c;
str->length++;
str->content[str->length] = '\0';
return 1;
}
else //长度不足,返回失败0
{
return 0;
}
}
//插入字符,index从0开始,注意需要将后面的字符全部向后挪一个位置
int insertChar(String *str,int index,char c)
{
int i;
if (str->length < MAX_LENGTH - 1)
{
for (i = str->length; i >= index; i--) //从最后一个'\0'开始都向后移动一个位置
{
str->content[i+1] = str->content[i];
}
str->content[index] = c;//将插入元素放入指定位置
return 1;
}
else //长度不足,返回失败0
{
return 0;
}
}
//删除指定位置元素,index从0开始,直接从后面往前覆盖即可
int deleteChar(String *str,int index)
{
int i;
for (i = index; i <= str->length; i++)
{
str->content[i ] = str->content[i+1];
}
return 1;
}
//将str2连接到str1
int concat(String *str1,String *str2)
{
int i = 0;
int leftLength = MAX_LENGTH - 1 - str1->length;//剩余可用长度
if (leftLength < str2->length) {//长度不足返回失败
return 0;
}
//依次取出str2中元素追加到str1
for (i = 0; i < str2->length; i++)
{
appendChar(str1,str2->content[i]);
}
return 1;
}
int main()
{
//str1测试
String str1;
clearStr(&str1);
printf("str1清空后:\n");
printStr(&str1);
printf("str1是否为空?\n");
printf("%d\n", isEmpty(&str1));
printf("str1当前长度:\n");
printf("%d\n", getStrLength(&str1));
appendChar(&str1, 'a');
appendChar(&str1, 'b');
appendChar(&str1, 'c');
printf("str1添加abc后:\n");
printStr(&str1);
insertChar(&str1, 0, 'x');
printf("str1插入x后:\n");
printStr(&str1);
deleteChar(&str1,1);
printf("str1删除a后:\n");
printStr(&str1);
//str2测试
String str2;
clearStr(&str2);
appendChar(&str2, 'e');
appendChar(&str2, 'f');
appendChar(&str2, 'g');
printf("str2添加efg后:\n");
printStr(&str2);
//str1连接str2
concat(&str1, &str2);
printf("str1连接str2后:\n");
printStr(&str1);
}