关于几个字符串操作的函数

好久没有用c语言写代码,偶然看到一个这样一个上机题!

输入:this is a book

输出:This Is A Book

此题号称华为上机题(华为你弱爆了!)!

我借着这个来复习一下几个字符串函数!


首先,毫无疑问,这种题目遍历一遍字符串是最快的!

void strformat(char* des)
{
	if(*des=='\0'||des==NULL)
		return;
	*des+='A'-'a';
	while(*(++des)!='\0')
		if(*des==' '&& *(des+1)!='\0')
			*(des+1)+='A'-'a';
}

如果,题目要求不能改变原字符串的我们可以使用strcpy函数拷贝一份函数


char* buf=(char*)calloc(strlen(str),sizeof(char));
strcpy(buf,str);

观察题目我们可以知道,英文字符串是以空格为分隔符的.

当我们在控制台宿舍字符串,一旦遇到空格scanf是会自动返回的!

因此类似于C++中stringstream,我们可以使用字符串格式化函数sscanf对字符串进行格式化,取出每一个单词!

void strformat2(char* des,char* src)
{
	int len=0;
	char* word=(char*)calloc(256,sizeof(char));
	sscanf(src,"%s",word);
	while(word)
	{
		len+=strlen(word);
		(*word)+='A'-'a';
		strcat(des,word);
		des[len++]=' ';
		sscanf(src+len,"%s",word);
		if(len>=strlen(src))
			break;
	}
	des[--len]='\0';
	free(word);
}

上面的函数同样能达到目的!但是,这里有一个bug:当src是以空格结尾是,尾巴的空格会被舍去!!


string.h中还有一个函数能够实现我们的要求!strtok!!

char* strtok(char* src,char* delim);

这个函数能够进行字符串分析,将src串中所有的delim替换为'\0',这样src就被分成了若干子串!


void strformat3(char* des,char* src)
{
	int len=0;
	char* result=NULL;
	result=strtok(src," ");//字符分隔将所有的' '替换为'/0'
	while(result)
	{
		len+=strlen(result);
		*result+='A'-'a';
		strcat(des,result);//取出剩下的
		des[len++]=' ';
		result=strtok(NULL," ");
	}
	des[--len]='\0';
}


上面的三种方法毫无疑问,方法一貌似是最适合解决问题的!

sscanf,strtok应该在更有用的场合使用!!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值