手记

C语言数据结构(16)--使用数组实现字符串常用操作实例

字符串操作可谓是常见中的常见,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);
}
0人推荐
随时随地看视频
慕课网APP