前言
下面我会给大家介绍一些字符串函数的实现。
一、字符串左旋问题
示例:cdefab是abcdef左旋得到的。
代码如下(示例):
#include<stdio.h>
#include<string.h>
int left_move(char *str1,char *str2)
{
int len1 = strlen(str1);
int len2 = strlen(str2);
if(len1 != len2)//二个字符串长度不相等,那么它就不是旋转的来,直接就返回0
{
return 0;
}
strncat(str1,str2,6);
char *ret = strstr(str1,str2);
if(ret == NULL)
{
return 0;
}
else
{
return 1;
}
}
int main(void)
{
char arr1[] = "abcdef";
char arr2[] = "cdefab";
int ret = left_move(arr1,arr2);
if(ret == 1)
{
printf("YES");
}
else
{
printf("NO");
}
return 0;
}
思路:字符串一自己给自己追加变成abcdefabcedf,再用strstr判断cdefad是不是变化的字符串的子串。
注意:strcat在Visual Studio上字符串自己不能给自己追加,但是在dev c++可以。
为了保险起见自己给自己追加用strncat后加字符串的长度。
二、strlen函数的实现
函数原型:
size_t __cdecl strlen(const char *_Str);
代码如下(示例):
#include<stdio.h>
int my_strlen(char *str)
{
int count = 0;
while(*str !='\0')
{
count++;
str++;//str++意思是它的地址加一,找到下一个字符的地址。
}
return count;
}
int main(void)
{
char arr[] = "abcdef";
int len = my_strlen(arr);
printf("%d",len);
strlen
}
三、strcpy函数的实现
函数原型:
char * __cdecl strcpy(char * __restrict__ _Dest,const char * __restrict__ _Source);
代码如下(示例):
#include<stdio.h>
#include<assert.h>
char *my_strcpy(char *dest,char *src)
{
assert(dest != NULL && src != NULL);//保证传递进来的二个指针都不为空
char *ret = dest;
while(*src !='\0')//while循环里可简写成while(*dest++ == *src++)
{
*dest = *src;
dest++;
src++;
}
*dest = *src;//把src最后的'\0'拷贝到dest。
return ret;
}
int main(void)
{
char arr1[] = "abcedf";
char arr2[] = "bit";
my_strcpy(arr1,arr2);
printf("%s",arr1);
}
四、strcat函数的实现
函数原型:
char * __cdecl strcat(char * __restrict__ _Dest,const char * __restrict__ _Source);
代码如下(示例):
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest,char* src)
{
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
while(*dest != '\0')//先找到目的地字符串的'\0',然后将src拷贝到dest。
{
dest++;
}
while(*src !='\0')//while循环里可简写成while(*dest++ == *src++)
{
*dest = *src;
dest++;
src++;
}
*dest = *src;//把src最后的'\0'拷贝到dest。
return ret;
}
int main(void)
{
char arr1[] = "abc";
char arr2[] = "def";
my_strcat(arr1,arr2);
printf("%s",arr1);
}
五、strcmp函数的实现
函数原型:
int __cdecl strcmp(const char *_Str1,const char *_Str2);
代码如下(示例):
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* dest,const char* src)
{
assert(dest && src);
while(*dest == *src && *des != '\0' && *src != '\0')
{
dest++;
src++;
}
if(*dest>*src)
{
return 1;
}
else if (*dest<*src)
{
return -1;
}
else
{
return 0;
}
}
int main(void)
{
char arr1[] = "abcdef";
char arr2[] = "abcdez";
int ret = my_strcmp(arr1,arr2);
if(ret == 1)
{
printf("字符串1大于字符串2。");
}
if(ret == -1)
{
printf("字符串1小于字符串2。");
}
if(ret == 0)
{
printf("字符串1等于字符串2。");
}
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了一些字符串操作函数的使用,还有很多函数可以在cplusplus上查找并使用。