C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
来源:互联网 发布:nginx部署nodejs项目 编辑:程序博客网 时间:2024/06/05 11:40
http://www.cnblogs.com/JCSU/articles/1305401.html
C语言字符串操作函数
1. 字符串反转 - strRev
2. 字符串复制 - strcpy
3. 字符串转化为整数 - atoi
4. 字符串求长 - strlen
5. 字符串连接 - strcat
6. 字符串比较 - strcmp
7. 计算字符串中的元音字符个数
8. 判断一个字符串是否是回文
1. 写一个函数实现字符串反转
版本1 - while版
{
char temp, * end = s + strlen(s) - 1 ;
while ( end > s)
{
temp = * s;
* s = * end;
* end = temp;
-- end;
++ s;
}
}
版本2 - for版
{
char temp;
for (char * end = s + strlen(s) - 1 ; end > s ; -- end, ++s)
{
temp = * s;
* s = * end;
* end = temp;
}
}
版本3 - 不使用第三方变量
{
for (char * end = s + strlen(s) - 1 ; end > s ; -- end, ++s)
{
* s ^= * end;
* end ^= * s;
* s ^= * end;
}
}
版本4 - 重构版本3
{
for (char * end = s + strlen(s) - 1 ; end > s ; -- end, ++s)
{
* s ^= * end ^= *s ^= * end;
}
}
版本5 - 重构版本4
{
for (char * end = s + strlen(s) - 1 ; end > s ; * s ++ ^= * end ^= * s ^= * end -- );
}
版本6 - 递归版
{
if (s[0 ] == '/0 ' )
return ;
else
strRev( & s[ 1 ]);
printf( " %c " ,s[0 ]);
}
2. 实现库函数strcpy的功能
strcpy函数位于头文件<string.h>中
版本1
{
char * p = dest;
while ( * dest++ = *src ++ )
;
dest = p;
}
版本2
{
char * p = dst;
while ( * p ++ = *src ++ )
;
return dst;
}
版本3
{
int i= 0 ;
for (; * (src + i) !=' /0 ' ; i ++)
* (dest + i) = * (src +i);
* (dest+ i) = '/0 ' ;
}
3. 实现库函数atoi的功能
atoi函数位于头文件<stdlib.h>中
版本1 - 附说明
{
if ( 0 == exp )
return 1 ;
return base* power( base, exp- 1 );
}
int __cdeclatoi( const char * s)
{
int exp= 0 , n = 0;
const char * t = NULL;
for (; * s == ' ' || * s == '/t ' || * s == '/n ' ; s ++ ) // 找到第一个非空字符
;
if ( * s > ' 9' || *s < ' 0 ' ) // 如果第一个非空字符不是数字字符,返回0
return 0 ;
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 ++ ;
}
return n;
}
版本2
{
int exp= 0 , n = 0;
const char * t = NULL;
for (; * s == ' ' || * s == '/t ' || * s == '/n ' ; s ++ ) // 略过非空字符
;
if ( * s > ' 9' || *s < ' 0 ' )
return 0 ;
for (t= s; * t >=' 0 ' && * t <= '9 ' ; ++ t)
;
t -- ;
while (t >= s)
{
n += ( * t - 48 ) *pow( 10 , exp);
t -- ;
exp ++ ;
}
return n;
}
4. 实现库函数strlen的功能
strlen函数位于头文件<string.h>中
版本1 - while版
{
int i = 0 ;
while ( * s )
{
i ++ ;
s ++ ;
}
return i;
}
版本2 - for版
{
for (int i = 0; * s; i ++ , s++ )
;
return i;
}
版本3 - 无变量版
{
if (* s == '/0 ' )
return 0 ;
else
return (strlen( ++ s) + 1 );
}
版本4 - 重构版本3
{
return * s ? (strlen(++ s) + 1) : 0 ;
}
5. 实现库函数strcat的功能
strcat函数位于头文件<string.h>中
版本1 - while版
{
char * p = dst;
while ( * p )
p ++ ;
while ( * p ++ = *src ++ )
;
return dst;
}
6. 实现库函数strcmp的功能
strcmp函数位于头文件<string.h>中
版本1 - 错误的strcmp
{
for (; * a != ' /0' && *b != ' /0 '; a ++ , b ++ )
if ( * a > * b)
return 1 ;
else if ( * a ==* b)
return 0 ;
else
return - 1;
}
版本2
{
int ret = 0 ;
while ( ! (ret = * (unsigned char *)src - * (unsigned char * )dst) && * src)
++ src, ++ dst;
if ( ret < 0 )
ret = - 1 ;
else if ( ret > 0 )
ret = 1 ;
return ( ret );
}
7. 计算字符串中元音字符的个数
int is_vowel(char a)
{
switch (a)
{
case ' a ' : case ' A ' :
case ' e ' : case ' E ' :
case ' i ' : case ' I ' :
case ' o ' : case ' O ' :
case ' u ' : case ' U ' :
return 1 ; break ;
default :
return 0 ; break ;
}
}
int count_vowel(const char *s)
{
int num;
if (s[0 ] == '/0 ' )
num = 0 ;
else
{
if (is_vowel(s[ 0 ]))
num = 1 + count_vowel(& s[ 1 ]);
else
num = count_vowel( & s[ 1 ]);
}
return num;
}
int main()
{
char * s = " AobCd ddudIe" ;
printf( " %d /n " , count_vowel(s));
return 0 ;
}
8. 判断一个字符串是否回文:包含一个单词,或不含空格、标点的短语。如:Madam I'm Adam是回文
版本1
* 程序功能:判断一个单词,或不含空格、标点符号的短语是否为回文(palindrome)
*/
#include < stdio.h >
#include < ctype.h >
int is_palindrome(const char *s)
{
bool is_palindrome= 0 ;
const char * 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);
}
int main()
{
const char * s =" Madam I' m Adam ";
printf(" %s %s /n" , s, is_palindrome(s) ? " is a palindrome! " : "is not a palindrome! ");
return 0;
}
有趣的回文 : He lived as a devil, eh?
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语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
- 语言字符串操作函数 - strcpy、strcmp、strcat、反转
- C语言字符串操作----strlen()、strcpy()、strcat()、strcmp()
- C语言字符串函数详解 strcpy、strcmp、strcat、strlen、strstr
- C语言面试必须会的几个字符串操作函数原型strcpy,strcmp,strlen,strcat
- C语言字符串常用操作函数-puts、gets、strcmp、strcpy、strcat、strlen
- C字符串函数strcmp\strcpy\strcat\memcpy
- 字符串操作函数Strcat、Strcpy、Strcmp、Strlen原型
- strlen, strcpy, strcat, strcmp, memset... (字符串操作函数的实现)
- 字符串处理函数gets()、puts()、strcmp()、strlen()、strcpy()、strcat()-C语言
- C语言字符串函数详解(2) strcpy、strcmp、strcat、strlen、strstr
- 字符串处理函数strlen、strcpy、strcat、strcmp和convert的C语言实现
- 字符串处理函数gets()、puts()、strcmp()、strlen()、strcpy()、strcat()-C语言
- c语言学习笔记(字符串函数strcmp,strcat,strcpy,strlen的简单实现)
- C语言中的字符串函数的实现,strcpy,strlen,strcat,strcmp
- 天外有天——一代棋圣吴清源自传(5)
- php 获取时间今天明天昨天时间戳
- 怎样阻止超链接跳转
- linux设备驱动程序之简单字符设备驱动
- Mysql大全
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
- Linux下常见文件格式的压缩、解压小结
- Jython unknown encoding问题
- 研究生初试录取(课程设计)
- 今天看到CSDN某博客提到的linux在线音乐播放器,移动的咪咕音乐不错,推荐一下
- php扩展 oauth 安装(sudo apt-get)
- 关于球面贴图
- poj 1035 串 枚举 暴力 tmp.insert(i, 1, current[i]); //谁能告诉我这句什么意思?
- Cow Sorting----置换