1. 倒置函数 RevStr
例如:I am from Shanghai -> Shanghai from am I
#include <iostream>
using namespace std;
void RevStr( char *src )
{
char *start = src, *end = src, *end = src, *ptr = src;
while ( *ptr++ != '\0' )
{
if ( *ptr == ' ' || *ptr == '\0' )//找到一个单词
{
end = ptr - 1; //end指向末尾单词
while ( start < end )
{
swap ( *start++, *end-- );
}
start = end = ptr + 1;
}
}
start = src, end = ptr - 2;//start 指向头;end指向尾
while ( start < end )
{
swap ( *start++, *end-- ); //把整个字符串逆置
}
}
int main()
{
char src[] = "I am from Shanghai";
cout << src << "\n";
RevStr( src );
cout << src << "\n";
return 0;
}
2. strcmp的实现
int myStrcmp ( const char *src, const char *dst )
{
int ret = 0;
while ( !( ret = *(unsigned char *)src - *(unsigned char *)dst ) && *dst )
{
++src;
++dst;
}
if ( ret < 0 )
return -1;
else if ( ret > 0 )
return 1;
}
3. 对比两个字符串最大的公共长度
char *commonstring( char *str1, char *str2 )
{
int i, j;
char *shortstr, *longstr;
char *substr;
if ( NULL == str1 || NULL == str2 )
return NULL;
if ( strlen(str1) <= strlen(str2))
{
shortstr = str1;
longstr = str2;
}
else
{
shortstr = str2;
longstr = str1;
}
if (strstr(longstr, shortstr) != NULL)
return shortstr;
substr = (char *) malloc(sizeof(char) * (sizeof(shortstr) + 1));
for (i = strlen(shortstr) - 1; i > 0; i--)
{
for ( j = 0; j <= strlen(shortstr) - i; j++ )
{
memcpy( substr, &shortstr[j], i );
substr[i] = '\0';
if (strstr(longstr,substr) != NULL)
return substr;
}
}
return NULL;
}
4. 编程实现strcat函数
char *mystrcat( char *dest, const char *src)
{
char *ret;
ret = dest; //保存dest中当前的内容
while(*dest++);//找到dest内容的末尾
dest--;//指向字符串的末尾
while (*dest++ = *src++);//循环复制
return ret;
}