`

C语言字符串操作函数

c 
阅读更多

C语言字符串操作函数

1. 写一个函数实现字符串反转

版本1 - while版

复制代码
voidstrRev(char*s)
{
chartemp,*end=s+strlen(s)-1;
while(end>s)
{
temp
=*s;
*s=*end;
*end=temp;
--end;
++s;
}
}
复制代码


版本2 - for版

复制代码
voidstrRev(char*s)
{
chartemp;
for(char*end=s+strlen(s)-1;end>s;--end,++s)
{
temp
=*s;
*s=*end;
*end=temp;
}
}
复制代码


版本3 - 不使用第三方变量

复制代码
voidstrRev(char*s)
{
for(char*end=s+strlen(s)-1;end>s;--end,++s)
{
*s^=*end;
*end^=*s;
*s^=*end;
}
}
复制代码


版本4 - 重构版本3

复制代码
voidstrRev(char*s)
{
for(char*end=s+strlen(s)-1;end>s;--end,++s)
{
*s^=*end^=*s^=*end;
}
}
复制代码


版本5 - 重构版本4

voidstrRev(char*s)
{
for(char*end=s+strlen(s)-1;end>s;*s++^=*end^=*s^=*end--);
}


版本6 - 递归版

复制代码
voidstrRev(constchar*s)
{
if(s[0]=='\0')
return;
else
strRev(
&s[1]);
printf(
"%c",s[0]);
}
复制代码



2. 实现库函数strcpy的功能

strcpy函数位于头文件<string.h>中

版本1

复制代码
strcpy(char*dest,constchar*src)
{
char*p=dest;
while(*dest++=*src++)
;
dest
=p;
}
复制代码


版本2

复制代码
char*__cdeclstrcpy(char*dst,constchar*src)
{
char*p=dst;
while(*p++=*src++)
;
returndst;
}
复制代码


版本3

复制代码
strcpy(char*dest,constchar*src)
{
inti=0;
for(;*(src+i)!='\0';i++)
*(dest+i)=*(src+i);
*(dest+i)='\0';
}
复制代码



3. 实现库函数atoi的功能

atoi函数位于头文件<stdlib.h>中

版本1 - 附说明

复制代码
intpower(intbase,intexp)
{
if(0==exp)
return1;
returnbase*power(base,exp-1);
}

int__cdeclatoi(constchar*s)
{
intexp=0,n=0;
constchar*t=NULL;

for(;*s==''||*s=='\t'||*s=='\n';s++)//找到第一个非空字符
;
if(*s>'9'||*s<'0')//如果第一个非空字符不是数字字符,返回0
return0;

for(t=s;*t>='0'&&*t<='9';++t)//找到第一个非数字字符位置-方法1
;
t
--;

/*找到第一个非数字字符位置-方法2
t=s;
while(*t++>='0'&&*t++<='9')
;
t-=2;
*/

while(t>=s)
{
n
+=(*t-48)*power(10,exp);//数字字符转化为整数
t--;
exp
++;
}
returnn;
}
复制代码


版本2

复制代码
int__cdeclatoi(constchar*s)
{
intexp=0,n=0;
constchar*t=NULL;

for(;*s==''||*s=='\t'||*s=='\n';s++)//略过非空字符
;
if(*s>'9'||*s<'0')
return0;

for(t=s;*t>='0'&&*t<='9';++t)
;
t
--;

while(t>=s)
{
n
+=(*t-48)*pow(10,exp);
t
--;
exp
++;
}
returnn;
}
复制代码



4. 实现库函数strlen的功能

strlen函数位于头文件<string.h>中

版本1 - while版

复制代码
size_t__cdeclstrlen(constchar*s)
{
inti=0;
while(*s)
{
i
++;
s
++;
}
returni;
}
复制代码


版本2 - for版

size_t__cdeclstrlen(constchar*s)
{
for(inti=0;*s;i++,s++)
;
returni;
}


版本3 - 无变量版

复制代码
size_t__cdeclstrlen(constchar*s)
{
if(*s=='\0')
return0;
else
return(strlen(++s)+1);
}
复制代码


版本4 - 重构版本3

size_t__cdeclstrlen(constchar*s)
{
return*s?(strlen(++s)+1):0;
}



5. 实现库函数strcat的功能

strcat函数位于头文件<string.h>中

版本1 - while版

复制代码
char*__cdeclstrcat(char*dst,constchar*src)
{
char*p=dst;
while(*p)
p
++;
while(*p++=*src++)
;
returndst;
}
复制代码



6. 实现库函数strcmp的功能

strcmp函数位于头文件<string.h>中

版本1 - 错误的strcmp

复制代码
intstrcmp(constchar*a,constchar*b)
{
for(;*a!='\0'&&*b!='\0';a++,b++)
if(*a>*b)
return1;
elseif(*a==*b)
return0;
else
return-1;
}
复制代码


版本2

复制代码
int__cdeclstrcmp(constchar*src,constchar*dst)
{
intret=0;

while(!(ret=*(unsignedchar*)src-*(unsignedchar*)dst)&&*src)
++src,++dst;

if(ret<0)
ret
=-1;
elseif(ret>0)
ret
=1;

return(ret);
}
复制代码



7. 计算字符串中元音字符的个数

复制代码
#include<stdio.h>

intis_vowel(chara)
{
switch(a)
{
case'a':case'A':
case'e':case'E':
case'i':case'I':
case'o':case'O':
case'u':case'U':
return1;break;
default:
return0;break;
}
}

intcount_vowel(constchar*s)
{
intnum;
if(s[0]=='\0')
num
=0;
else
{
if(is_vowel(s[0]))
num
=1+count_vowel(&s[1]);
else
num
=count_vowel(&s[1]);
}
returnnum;
}

intmain()
{
char*s="AobCdddudIe";
printf(
"%d\n",count_vowel(s));
return0;
}
复制代码



8. 判断一个字符串是否回文:包含一个单词,或不含空格、标点的短语。如:Madam I'm Adam是回文

版本1

复制代码
/*
*程序功能:判断一个单词,或不含空格、标点符号的短语是否为回文(palindrome)
*/
#include
<stdio.h>
#include
<ctype.h>

intis_palindrome(constchar*s)
{
boolis_palindrome=0;
constchar*end=s;

if(*end=='\0')/*如果s为空串,则是回文*/
is_palindrome
=1;

while(*end)++end;/*end指向串s最后一个字符位置*/
--end;

while(s<=end)
{
while(*s==''||!isalpha(*s))/*略去串s中的非字母字符*/
++s;
while(*end==''||!isalpha(*end))
--end;
if(toupper(*s)==toupper(*end))/*将s中的字母字符转换为大字进行判断*/
{
++s;
--end;
}
else
{
is_palindrome=0;break;
}/*在s<=end的条件下,只要出现不相等就判断s不是回文*/
}
if(s>end)
is_palindrome=1;
else
is_palindrome=0;
return(is_palindrome);

}

intmain()
{
constchar*s="MadamI'mAdam";
printf("%s%s\n",s,is_palindrome(s)?"isapalindrome!":"isnotapalindrome!");
return0;
}
复制代码


趣的He lived as a devil, eh?

Don't nod
Dogma: I am God
Never odd or even
Too bad – I hid a boot
Rats live on no evil star
No trace; not one carton
Was it Eliot's toilet I saw?
Murder for a jar of red rum
May a moody baby doom a yam?
Go hang a salami; I'm a lasagna hog!
Satan, oscillate my metallic sonatas!
A Toyota! Race fast... safe car: a Toyota
Straw? No, too stupid a fad; I put soot on warts
Are we not drawn onward, we few, drawn onward to new era?
Doc Note: I dissent. A fast never prevents a fatness. I diet on cod
No, it never propagates if I set a gap or prevention
Anne, I vote more cars race Rome to Vienna
Sums are not set as a test on Erasmus
Kay, a red nude, peeped under a yak
Some men interpret nine memos
Campus Motto: Bottoms up, Mac
Go deliver a dare, vile dog!
Madam, in Eden I'm Adam
Oozy rat in a sanitary zoo
Ah, Satan sees Natasha
Lisa Bonet ate no basil
Do geese see God?
God saw I was dog
Dennis sinned


世界之最:世界上最长的回文包含了17,259个单词


说明:__cdecl,__stdcall是声明的函数调用协议.主要是传参和弹栈方面的不同.一般c++用的是__cdecl,windows里大都用的是__stdcall(API)

分享到:
评论

相关推荐

    C语言字符串操作函数.doc

    C语言字符串操作函数 C语言字符串操作函数是一组强大且实用的函数,用于处理和操作字符串。这些函数在C语言编程中非常常用,掌握这些函数可以提高编程效率和质量。本章将详细介绍C语言字符串操作函数的使用方法和...

    C语言字符串替换函数strrpl支持中文汉字

    C语言字符串替换函数strrpl支持中文汉字,解决含中文汉字,可能替换错误的情况。支持GBK、GB18030字符串。

    C语言字符串操作函数[汇编].pdf

    C语言字符串操作函数[汇编].pdf

    C语言字符串函数大全 C语言字符串函数大全

    C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符串函数大全C语言字符...

    C语言字符串操作大全

    本文将详细讲解几个常用的C语言字符串操作函数,包括`stpcpy`、`strcat`、`strchr`、`strcmp`以及`strncmpi`。 1. `stpcpy`函数: `stpcpy`函数用于将一个字符串复制到另一个字符串中,它的功能类似于`strcpy`,但...

    C语言字符串处理函数

    几个字符串处理函数增强版 常用需求基本都能完成 已经编译成DLL 函数列表 兼容字符和串 void revstr char str 字符串反转 int substring char res int pos int len char substr 从pos开始取len个字符到substr中 ...

    C语言字符串函数大全

    C语言字符串函数大全是C语言中对字符串操作的集合,包括字符串拷贝、字符串拼接、字符串查找、字符串比较等多种操作。下面是对这些函数的详细介绍: 1. stpcpy函数: stpcpy函数用来拷贝一个字符串到另一个字符串。...

    C语言字符串练习(习题+答案).zip

    本资源"《C语言字符串练习(习题+答案).zip》"正是针对这一需求而准备的,它包含了C语言字符串操作的专项练习题和对应的答案,帮助学习者巩固和提升在字符串处理方面的技能。 字符串在C语言中扮演着重要角色,它们...

    C语言字符串处理函数整理版本

    C语言字符串处理函数整理版本,包含字符串基本操作,字符串类型转换、字符检查、输入输出流、输入输出流分割、异常处理等

    C语言字符串转换为Python字符串的方法

    如果C语言字符串是宽字符串,可以使用Py_BuildValue()函数或PyUnicode_FromWideChar()函数来构建一个字符串,例如: ```c wchar_t *w; /* Wide character string */ int len; /* Length */ PyObject *obj = Py_...

    更安全的C语言字符串处理函数

    还有一点值得引起注意:当你引用 strsafe 系列函数时,原有的 C 语言字符串处理函数都将被自动进行 #undef 处理。这也没问题,因为调试过程中的出错信息将会告诉你哪些函数已经被相应的 strsafe 系列函数取代了。好...

    C语言字符串函数使用大全

    C语言字符串函数是C语言中用于操作字符串的函数,包括字符串拷贝、字符串拼接、字符串查找、字符串比较等。这些函数在C语言编程中非常重要,本文将对这些函数进行详细的介绍。 1. stpcpy函数 stpcpy函数的功能是将...

    C语言写字符串函数及任意个数求和

    C语言本身并不像其他高级语言那样内置了丰富的字符串操作函数,但通过标准库中的`&lt;string.h&gt;`我们可以使用一些基本的字符串函数,如`strcpy`、`strlen`等。然而,为了更好地理解和掌握C语言,有时我们需要自己动手...

    C语言 不使用strcat函数实现连接两个字符串功能代码

    下面是用C语言实现不使用是strcat 函数实现连接两个字符串的功能。 源代码: #include void constring(char s[],char t[],char q[]); //函数声明 int main(void) { char s[100]; char q[100]; char t[200]; ...

Global site tag (gtag.js) - Google Analytics