strcat函数相当于一个拼接的功能
例如如下代码:
char str1[100] = "sing dance ";
char str2[100] = "rap basketball";
strcat(str1, str2);
puts(str1);
这里需要注意几点
- Appends a copy of the source string to the destination string. The terminating null character in
destination is overwritten by the first character of source, and a null-character is included at the end of the new string formed by the concatenation of both in destination. - 源字符串必须以 ‘\0’ 结束。
- 目标空间必须有足够的大,能容纳下源字符串的内容。
- 目标空间必须可修改。
模拟实现strcat函数
char* my_strcat(char* dest, const char* src){
assert(dest != NULL&&src != NULL);
char* p = dest;
//先找到dest的末尾
while (*p != '\0'){
p++;
}
//循环结束,p已经指向\0的位置
//2,开始拷贝
while (*src != '\0'){
*p = *src;
p++;
src++;
}
// \0也需要拷贝
*p = '\0';
return dest;
}
strcmp函数:比较两个字符串大小
char str1[100] = "sing dance ";
char str2[100] = "rap basketball";
int ret = strcmp(str1, str2);
if (ret == 0){
printf("str1=str2");
}
else if (ret < 0)
printf("str1<str2");
else
printf("str1>str2");
int strcmp ( const char * str1, const char * str2 );
- 标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
判断字符串的大小用字典序来判断
函数实现strcmp
int my_strcmp(const char* str1, const char* str2){
assert(str1 != NULL&&str2 != NULL);
while (*str1 != '\0'&&*str2 != '\0'){
if (*str1 < *str2){
return -1;
}
else if (*str1>*str2){
return 1;
}
else{
str1++;
str2++;
}
}
//循环结束,必有一个数组已经遍历了一遍,并且此时这个数组指向'\0'的位置
//这两个字符串在一定长度相等,但仍需进行进一步判断
if (*str1 < *str2){
//str1指向‘\0'
return -1;
}
else if (*str1>*str2){
//str2指向‘\0'
return 1;
}
else{
//两个数组都指向‘\0’
return 0;
}
}
int main(){
char str1[] = "sing dance";
char str2[] = "rap basketball";
int ret = my_strcmp(str1, str2);
if (ret == 0){
printf("str1=str2");
}
else if (ret < 0){
printf("str1<str2");
}
else
printf("str1>str2");
system("pause");
return 0;
}