编程练习题——数组操作

数组逆序

将字符数组所有元素进行逆序
//实现:最左端和最右端元素交换,直到相遇
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;
}

猜你喜欢

转载自blog.csdn.net/qq_35599308/article/details/84452383