一:字符串操作函数的功能及应用
1、strcpy()函数
Strcpy(字符数组1,字符数组2)此函数是字符串拷贝函数,它的作用是将字符串2复制到字符数组1中去。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str1[30] = { "hello world!!!" };
char str2[30];
strcpy(str2, str1);
printf("%s", str2);
system("pause");
return 0;
}
2、strcat()函数
此函数是字符串连接函数,,其一般形式为strcat(字符数组1,字符数组2),作用是将字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值,即字符数组1的地址。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str1[30] = { "we are friend " };
char str2[30]= { "all the time!" };
printf("%s", strcat(str1,str2));
system("pause");
return 0;
}
3、strcmp()
此函数是字符串比较函数,其一般形式为strcmp(字符串1,字符串2)。字符串比较规则是将两个字符串从左至右逐个字符相比,直到出现不同的字符或者遇到’\0’为止。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char passwd;
char key[30] = { "abcdef " };
scanf("%s", &passwd);
if (strcmp(key, passwd) == 0)
{
printf("密码正确\n");
}
else
{
printf("密码错误\n");
}
system("pause");
return 0;
}
4、strchr()
此函数功能是查找字符串中首次出现某个字符的位置。,成功返回所查找字符第一次出现的位置,失败返回NULL.
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void)
{
char string[17];
char *p, c = 'r';
strcpy(string, "thisisastring");
p = strchr(string, c);
if (p)
printf("字符c的位置在:%s\n", c, p);
else
printf("字符c没有找到");
system("pause");
return 0;
}
5、strstr()
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str[10]="1234xyz";
char *str1 = strstr(str, "34");
if (*str1)
{
printf("查找成功\n");
}
else
{
printf("查找失败\n");
}
system("pause");
return 0;
}
6、strlen()
测字符串长度的函数。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char str[10]="china";
printf("%d\n", sizeof(str));
printf("%d\n", strlen(str));
system("pause");
return 0;
}
二:字符串操作函数实现
1、strlen()函数的实现
方法一:
int my_strlen(const char*str)
{
int length = 0;
while (*str ++!= '\0')
{
length++;
}
return length;
}
方法二:使用指针-指针的方法实现
使用指针减去指针的方法的条件是:两个指针指向同一数组中的元素。
1:指针减去指针的结果是两个指针之间元素的个数,不是元素的长度。
2:如果两个指针指向两个不同数组的元素, 那么他们之间 相减的结果是未定义的。
int _my_strlen(char * s)
{
char* p = s ;
while (*p != '\0' )
p++;
return p - s ;
}
2、strcpy()函数的实现
方法一:
char *strcpy(char *dest,const char *src )
{
if ((dest == NULL) || (src == NULL))
{
return NULL;
}
char *ret_string = dest ;
while (*dest ++ = *src++) != ’\0′);
return ret_string;
}
注:返回char * 指针的原因是为了实现链式表达式,如:
int length = strlen(strcpy(dest, “hello world”));
方法二:
#include <stdio.h>
#include <assert.h>
char* my_strcpy(char *dest, const char * src)
{
assert(dest != NULL );//assert(dest);
assert(src);
char *ret = dest ;
while (*dest ++ = *src++)
{
;
}
/*while (*src != '\0')
{
*dest++ = *src++;
}
*dest = '\0';*/
return ret;
}
int main()
{
char arr[20] = "abc" ;
char p[] = "change world!" ;
//链式访问
printf( "%d\n", strlen(strcpy(arr, p)));
printf( "%s\n", arr);
system( "pause");
return 0;
}
3、strcat()函数的实现
char * __cdecl strcat(char * dst, const char * src)
{
char * cp = dst ;
while (*cp)
cp++;
while (*cp++ = *src ++);
return(dst );
}
转载于:https://blog.51cto.com/10921544/1737322