赞
踩
1.参数:
size_t strlen ( const char * str );
2.使用方法:
#include<string.h>
int main()
{
char arr[] = { "abcde" };
int n = strlen(arr);
int i = 0;
for (i = 0; i < n; i++)
{
printf("%c ", arr[i]);
}
return 0;
}
3.模拟实现:(此处为计数器办法,还可以用1.指针-指针 2.递归的方式)
size_t mysrtlen(const char* str) { size_t cnt = 0; assert(str); while (*str != '0') { cnt++; str++; } } int main() { char arr[] = "abcdef"; size_t n = my_strlen(arr); printf("%u\n", n); return 0; }
1.参数:
char* strcpy(char * destination, const char * source );
2.使用方法:
strcpy 里的第一个参数是拷贝的目标空间,第二个参数是拷贝的内容
int main()
{
char arr[20] = { "xxxxxxxxxxxxxxxxxxxx" };
char x[] = { "hello china" };
strcpy(arr, x);
printf("%s", arr);
return 0;
}
3.模拟实现
void my_strcpy(char* dest, const char* src)
{
assert(dest && src);
char* ret = dest; //记录一下初始位置
while (*src)
*dest++ = *src++;
return ret;
}
int main(){
char arr1[] = "abcdef";
char arr2[20]={0};
my_strcpy(arr2,arr1);
return 0;
}
1.参数:
char * strcat ( char * destination, const char * source );
2.使用方法:
int main()
{
char arr[20] = { "hello " };
char arr2[] = "china";
strcat(arr, arr2);
printf("%s\n", arr);
return 0;
}
strcat 函数追加会把 arr2 的所有字符串拷贝到arr1里,包括\0
3.模拟实现
char* my_strcat(char* dest, const char* src) { assert(dest && src); char* ret = dest; //1.找到目标空间的末尾\0 while (*dest != '\0') { dest++; } //2.拷贝 while (*dest++ = *src++) ; return ret; } int main() { char arr1[] = "hello "; my_strcat(arr1, "world"); return 0; }
1.参数:
int strcmp ( const char * str1, const char * str2 );
strcmp函数判定规则:
第一个大于第二个,返回大于0的数字
第一个等于第二个,则返回0
第一个小于第二个,则返回小于0的数字
strcmp 是比较每个字符串的第一个字符, 如果相等,
则继续比较下一对字符,直到字符不相等或遇到’\0’
2.使用方法:
int main()
{
char arr[] = { "abcdefg" };
char str[] = { "abg" };
int ret = strcmp(arr, str);
if (ret > 0)
printf("arr > str");
else if (ret < 0)
printf("arr < str");
else
printf("arr == str");
return 0;
}
3.模拟实现
int my_strcmp(const char* str1,const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2) //相等就找下一个
{
if (*str1 == '\0') return 0; //相等
str1++;
str2++;
}
if (*str1 > *str2) return 1;
else return -1;
//上述if - else可简化为 return(*str1 - *str2);
}
1.参数:
char * strncpy ( char * destination, const char * source, size_t num );
2.使用方法:
int main()
{
char arr1[25] = { "hello world!" };
char arr2[] = { "For a better tomorrow!########" };
strncpy(arr1, arr2, 22);
printf("%s\n", arr);
return 0;
}
1.参数:
char * strncat ( char * destination, const char * source, size_t num );
2.使用方法:
int main()
{
char arr[20] = "hello ";
char* str = "world! For a better tomorrow!";
strncat(arr, str, 6);
printf("%s\n", arr);
return 0;
}
1.参数:
int strncmp ( const char * str1, const char * str2, size_t num );
2.使用方法:比较前3个字符大小
int main()
{
char arr[] = { "abgefg" };
char str[] = { "abgaaaa" };
int ret = strncmp(arr, str,3);
if (ret > 0)
printf("arr > str");
else if (ret < 0)
printf("arr < str");
else
printf("arr == str");
return 0;
}
1.参数:
char * strstr ( const char *str1, const char * str2);
2.使用方法:
int main()
{
char arr[] = { "abcdefg" };
char str[] = { "cde" };
char* ret = strstr(arr, str);
if (ret == NULL)
printf("没有找到\n");
else
printf("%s\n", ret);
return 0;
}
1.参数:
char * strtok ( char * str, const char * sep );
2.使用方法:
1.参数:
char * strerror ( int errnum );
注:需包含头文件<errno.h>
2.效果展示:
int main()
{
printf("%s\n", strerror(0));
printf("%s\n", strerror(1));
printf("%s\n", strerror(2));
printf("%s\n", strerror(3));
printf("%s\n", strerror(4));
printf("%s\n", strerror(5));
return 0;
}
3.使用方法:
一般是 strerror 里放 errno,errno 里存放的是错误码
int main()
{
FILE* pFile;
pFile = fopen("test.txt", "r");//打开test.txt,以读的形式打开文件
if (pFile == NULL) // 打开失败就是空指针
printf("%s\n", strerror(errno));
//错误码自动保存在 errno 变量当中
return 0;
}
1.参数:
void perror(const char* str);
注:需包含头文件<stdio.h>
2.使用方法:
int main() { //1. 打开文件失败时,返回NULL FILE* pd = fopen("test.txt", "r"); if (pd == NULL) { perror("错误信息"); return 1; } // 2. 读文件 // ..... //3. 关闭文件 fclose(pd); pd = NULL; return 0; }
注:以上函数需要头文件<ctype.h>
使用:
#include<ctype.h> int main() { char arr[20] = { 0 }; scanf("%s", &arr); int i = 0; while (arr[i] != '\0') { if (isupper(arr[i])) //判断是否是大写字母 { arr[i] = tolower(arr[i]); } printf("%c ", arr[i]); i++; } return 0; }
使用:
int main() { char arr[20] = { 0 }; scanf("%s", &arr); int i = 0; while (arr[i] != '\0') { if (islower(arr[i])) //判断是否是小写字母 { arr[i] = toupper(arr[i]); //转换成大写字符 } printf("%c ", arr[i]); i++; } return 0; }
注意头文件的使用,使用字符串相关函数都要有<string.h>,两个报错函数不同头文件,字符操作函数和转换函数需要<ctype.h>。
一般使用有字符串长度限制的字符串函数,防止越界报错,提高安全性。
注意思考这些字符串函数自己作用于自己时的情况,结合’\0’考虑。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。