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