C 语言字符串处理积累

写在前面:本文主要用来积累字符串处理的各种方式。

 

正文:

1、目的:函数输入一个字符串,要求去掉字符串中的行首和行尾的空格后输出。

      实现函数和测试代码如下:

#include <stdio.h>
#include <string.h>


//该函数的作用为:输入一个字符串,删掉行首和行尾的空格
void strtrim (char * p_str )
{
	char *p = p_str;
	char *q = p_str;
	
	if(NULL == p_str)
		return;
	
	//去掉行首的空格
	while((*p == ' ')||(*p == '\t'))
	{
		p++;
	}	
	
	//赋值
	while((p != NULL )&&(*p != '\0'))
	{
		*q++ = *p++;
		//*q = *p;
		//q ++;
		//p ++;
	}
	
	q --;
	
	while((*q == ' ')||(*q == '\t'))
	{
		q --;
	}	
	
	//加上结尾
	*(q + 1) = '\0';
} 

int main(void)
{
	char buf[20] = {"  abcd  efg "}; // 前边两个空格,中间2个空格,后边一个空格
	
	printf("before convert buf:%s\n",buf);
	printf("before convert strlen(buf)=%d\n",strlen(buf));
	
	strtrim(buf);
	
	printf("after convert buf:%s\n",buf);
	printf("after conver strlen(buf)=%d\n",strlen(buf));
		
}

      测试结果:

  2、目的:将一串字符串,用特定的分隔符分成多段字符串,例如一串字符串为:"1232456.789.10.112.34",然后以". "为分隔符将字符串分成5段分别是"123456"、"789"、"10"、"112"、"34"

    strtok()函数:在  #include <string.h>头文件中,

    函数原型:char *strtok(char *str, const char *delim);

      当strtok()在参数str的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。

       返回值:从str开头开始的一个个被分割的串。当str中的字符查找到末尾时,返回NULL。如果查找不到delim中的字符时,返回当前strtok的字符串的指针。所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。

    注意:需要注意的是,使用该函数进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中,因此多线程同时访问该静态变量时,则会出现错误。

 代码:

int split(char dst[][80], char* str, const char* spl)
{
    int n = 0;
    char *result = NULL;
    result = strtok(str, spl); //第一次调用
    while( result != NULL )
    {
        strcpy(dst[n++], result);
        result = strtok(NULL, spl);  //后面调用
    }
    return n;
}
 
 int main()
{ 
    char str[] = "1232456.789.10.112.34";
	char *p = (char *)malloc(sizeof(str)); 
	
	memcpy(p,str,sizeof(str)); //保存住源来字符串
	
	
	int i = 0;
    char dst[10][80];
    int cnt = split(dst, str, ".");
	
    for ( i = 0; i < cnt; i++)
        puts(dst[i]);
	
	printf("1:str:%s\n",str);
	//printf("p:%s\n",p); 
	memcpy(str,p,sizeof(str)); //将字符串还原
	printf("2:str:%s\n",str);
	
	free(p);
    return 0;
}

 运行结果:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KiranWang

一起努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值