关于字符串的操作

基础概念

  • " "括起来的内容是字符串,以’\0’结尾
    * C语言中没有字符串类型,可以将字符串存入字符数组中
    字符串是一个常量不可以改变,字符串本身代表首个元素的地址
    char a[]=“hello”;
    a[2]=‘w’;
    char *p =“hello”;
    p[2]=‘w’; 错误

字符串操作

1、求出字符串的长度

C实现函数:

int strLen(char *pStr)
{
	 if (pStr == NULL)
	     return -1;
	 int len = 0;
	 while(*(pStr++))
	 {
        len++;
	 }     
 return len;
}

2、将字符串逆序

C实现函数:

void reverse(char *pStr)
{
	int left  = 0;
	int right = strLen(pStr)-1;
	
	while (left<right)
	{
		char tmp      = pStr[left];
		pStr[left++]  = pStr[right];
		pStr[right--] = tmp;
	}
}

3、单词逆序

C实现函数:

void word_reverse(char *pStr)
{
     char *p[100]={0};
     char *p1=pStr;
     char *p2=pStr;
     int space_count=0;
    // 求出空格数 单词数=空格数+1
     while(*p2)
     {
         if(' '== (*p2))
         {
             space_count++;
             p[space_count]=p2;
         }
         p2++;
     }
     p[space_count+1]=p2;
     if(space_count>0) //大于一个单词
     {
        reverse(pStr);
        int i;
        for(i=1;i<=space_count+1;i++)
        {
            char *p3=p[i]-1;
            while (p1<p3)
            {
                char tmp = *p1;
                *p1++ = *p3;
                *p3-- = tmp;
            }
            p1=p[i]+1;
	    }
	 }
}

4、去掉字符串右边的空格

C实现函数:

void func1(char *pStr)
{
    // 参数检测
    if (pStr == NULL)
        return;
    
    while (*pStr++); // 指针定位到字符串最后
    
    pStr = pStr-2; // 指针定位到'\0'前的元素
    
    while(*pStr == ' ') // 从右往左查找第一个非空格元素
    {
        pStr--;
    }
    
    *(pStr+1) = '\0';
}

5、去掉字符串左边的空格

C实现函数:

void func2(char *pStr)
{
    // 参数检测
    if (pStr == NULL)
        return;
    
    char *p1 = pStr;
    char *p2 = pStr;
    while (*p2 == ' ')
    {
        p2++;
    }
    
    while (*p2 != '\0')
    {
        *p1 = *p2;
        p1++;
        p2++;
    }
    *p1 = *p2;
}

5、去掉字符串左边的空格

C实现函数:

void func2(char *pStr)
{
    // 参数检测
    if (pStr == NULL)
        return;
    
    char *p1 = pStr;
    char *p2 = pStr;
    while (*p2 == ' ')
    {
        p2++;
    }
    
    while (*p2 != '\0')
    {
        *p1 = *p2;
        p1++;
        p2++;
    }
    *p1 = *p2;
}

6、去掉字符串左边的空格

C实现函数:

void func2(char *pStr)
{
    // 参数检测
    if (pStr == NULL)
        return;
    
    char *p1 = pStr;
    char *p2 = pStr;
    while (*p2 == ' ')
    {
        p2++;
    }
    
    while (*p2 != '\0')
    {
        *p1 = *p2;
        p1++;
        p2++;
    }
    *p1 = *p2;
}

7、去掉这个字符串中出现次数最少的字符

C实现函数:

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';
}

8、压缩字符串 (未完成)

C实现函数:

//aaaabbbcssddf  ===> a4b3cs2d2f
int zip_string(char*pstr)
{
	//类型检查
	if(NULL==pstr)
		return -1;
	char *p1=pstr;
	char *p2=pstr+1;
	while(*p2)
	{
		int count=1;
		while(*p2==*p1)
		{
			count++;
			p2++;	
		}
		if(count>1)
		*(p1+1)=count+'0';
		p1=p2;
		p2++;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值