编程练习题——数组操作

这篇博客探讨了多种编程题目,包括数组的逆序操作、统计数组中字符的数量、去除字符串首尾空格、查找子串、删除最少出现的字符以及移除字符串中的空格等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组逆序

将字符数组所有元素进行逆序
//实现:最左端和最右端元素交换,直到相遇
void Reverse(char *pStr, int len)
{
	int left = 0;
	int right = len - 1;//去掉空字符

	while(left < right)
	{
		char tmp;
		tmp = *(pStr + left);
		*(pStr + left++) = *(pStr + right);
		*(pStr + right--) = tmp;
	}

}

数组字符个数统计

//计算数组字符个数
//方法:循环计数增加,直到遇到'\0'
int StrLen(char *pStr)	//指向字符数组的指针命名 char *pStr
{
	int len = 0;		//C变量只能定义在函数开头,而且变量定义后及时初始化
	if(pStr == NULL)	//对指针有效性检查,避免段错误
		return -1;

	while( *(pStr++) )	//'\0' = 0,可以用来对循环进行判断,
		len++;			//区别1.*(p++) 和 (*p)++
	//循环结束后指针指向'\0'的后面一位

	return len;
}

去掉字符串右边的空格

//去掉字符串右边的空格
//实现:
//1、将指针指向字符数组末尾
//2、自右向左,找到第一个不为空格的字符
//3、指针左移一格,添加'\0'
void Remove_Space_On_Right(char *pStr)
{
	char *p = pStr;
	while(*(p++) != '\0')
		;
	p -= 2;

	while(*p-- == ' ')
		;

	p += 2;
	*p = '\0';
}

去掉字符串左边的空格

//去掉字符串左边的空格
//实现:
//1、定义两个指针变量,初始p1指向第一个空格,p2指向非空格字符第一个元素
//2、直到p2到达最后
void Remove_Space_On_Left(char *pStr)
{
	if(pStr == NULL)
		return;

	char *p1 = pStr;
	char *p2 = pStr;

	while(*p2++ == ' ')
		;

	p2--;

	while(*p2 != '\0')
	{
		*p1 = *p2;
		p1++;
		p2++;
	}

	*p1 = '\0';

}

找字符串子串

//找子串
//将src指针后移后的字符串和目标字符串相比较
int my_strncmp(char *s1, char *s2, int len)//src head h_len
{
	int i;
	for (i = 0; i < len; i++)//s1和s2比较len个长度
	{
		if (*(s1 + i) != *(s2 + i))
		{
			return -1;	//没有找到子串函数结束
		}
	}
	return 0;	//找到子串返回0
}

删除字符串中出现最少次数的字符

// 去掉这个字符串中出现次数最少的字符
void func3(char *pStr)
{
	if (pStr == NULL)  // 参数检测
		return;
		
	char count[256] = {0};	//统计字符串计数数组
	char *p1 = pStr;

	while (*p1)	//遍历数组
	{
		count[*p1]++;
		p1++;
	}
		
	int min = count[pStr[0]];  // 找出现最少的 次数
	p1 = pStr;

	while (*p1)
	{
		if (min > count[*p1])
			min = count[*p1];
		p1++;
	}
	
	p1 = pStr;
	char *p2 = pStr;
	while (*p2)
	{
		if (count[*p2] != min)
		{
			*p1 = *p2;
			p1++;
		}
		p2++;
	}
	*p1 = '\0';
}

删除字符串中的空格

/*
实现:
p1左移,找到空格后,数组整体左移一位,p1重新回到开始
*/
char * Remove_Space(char *pStr)
{
	char *p1 = pStr;
	char *p2 = pStr;

	while (*p1 != '\0')
	{
		//1、p1从右往左寻找第一个空格
		if (*p1 == ' ')
		{
			//2、找到空格后将数组整体左移一位
			p2 = p1 + 1;
			while (*p2 != '\0')
			{
				*p1 = *p2;
				p1++;
				p2++;
			}//结束此时!!'\0'
			//3、将\0赋值给末尾,然后重新遍历
			*p1 = *p2;	//将'\0'给末尾 '\0''\0'
			p1 = pStr;	//重头计数
		}
		p1++;
	}

	return pStr;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值