1.字符分类函数
C语言中有一系列函数是专门做字符分类的 - 字符分类函数
使用字符分类函数需要包含头文件 #include <ctype.h>
函数 - iscntrl 作用区分任何控制字符
函数原型:
int iscntrl ( int c );
控制字符:
int main()
{
// ACSLL码值 0-31 为控制字符
//条件符合返回真(非0),条件不符合返回0
int ret = iscntrl(27); // 27 - ACSLL码值 - ESC
printf("%d\n", ret);
return 0;
}
//以下函数同上
2. 字母大小写转换
islower 函数可以判断是否为小写字母 ,真 - 非0 ; 假 - 0
isupper 函数可以判断是否为大写字母 ,真 - 非0 ; 假 - 0
字符转换函数
tolower 可以将传进去大写字母转小写
toupper 可以将传进去小写字母转大写
配合以上函数我们就可以完成字母大小写转换
int main()
{
char str1[] = "hello ouyang!";
char str2[] = "HELLO OUYANG!";
char c;
int i = 0;
while (str1[i])
{
c = str1[i];
if (islower(c))
{
c = toupper(c);
}
putchar(c);
i++;
}
printf("\n");
int j = 0;
while (str2[j])
{
c = str1[j];
if (isupper(c))
{
c = tolower(c);
}
putchar(c);
j++;
}
return 0;
}
3. strlen的使用和实现
作用:用来计算字符串的长度,遇到"\0"停止
包含头文件 #include <string.h>
函数原型:size_t strlen(const char* str);
int my_strlen(char* str)
{
int count = 0;
assert(str); //str不可以为NULL,断言一下
while (*str++)
{
count++;
}
return count;
}
int main()
{
char str[] = "abcdefg"; //7个字符
int ret1 = strlen(str);
int ret2 = my_strlen(str);
printf("ret1 = %d\n", ret1);
printf("ret2 = %d\n", ret2);
return 0;
}
4. strcpy的使用和实现
作用:用来拷贝字符串
包含头文件 #include <string.h>
函数原型:char* strcpy(char* destination, const char* source);
char* my_strcpy(char* str4, const char* str3)
{
char* cur = str4;
assert(str4 != NULL);
assert(str4 != NULL);
while (*str4++ = *str3++)
;
return cur;
}
int main()
{
char str1[] = "abcdef";
char str2[100];
char str3[] = "abcdef";
char str4[100];
strcpy(str2, str1);
my_strcpy(str4, str3);
printf("str1 = %s\n", str1);
printf("str2 = %s\n", str2);
printf("str3 = %s\n", str3);
printf("str4 = %s\n", str4);
}
5. strcat的使用和实现
作用:用来拼接字符串
包含头文件 #include <string.h>
函数原型:char* strcat(char* destination, const char* source);
char* my_strcat(char* str3, char* str4)
{
char* cur = str3;
while (*str3)
{
str3++;
}
while ((*str3++ = *str4++))
;
return cur;
}
int main()
{
char str1[100] = "hello ";
char str2[] = "ouyang!";
char str3[100] = "hello ";
char str4[] = "ouyang!";
strcat(str1, str2);
my_strcat(str3, str4);
printf("%s\n", str1);
printf("%s\n", str3);
return 0;
}
6. strcmp的使用和实现
作用:用来比较字符串长度
包含头文件 #include <string.h>
函数原型:int strcmp ( const char * str1, const char * str2 );
返回:
str1 > str2 - 大于0
str1 = str2 - 等于0
str1 < str2 - 小于0
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return *str1 - *str2;
}
int main()
{
char str1[] = "abcdef";
char str2[] = "abcdef";
char str3[] = "abcde";
char str4[] = "abcdeg";
int ret1 = strcmp(str1, str2);
int ret2 = strcmp(str1, str3);
int ret3 = strcmp(str1, str4);
int ret4 = my_strcmp(str1, str2);
int ret5 = my_strcmp(str1, str3);
int ret6 = my_strcmp(str1, str4);
printf("strcmp_ret1 = %d\n", ret1);
printf("strcmp_ret2 = %d\n", ret2);
printf("strcmp_ret3 = %d\n", ret3);
printf("my_strcmp_ret4 = %d\n", ret4);
printf("my_strcmp_ret5 = %d\n", ret5);
printf("my_strcmp_ret6 = %d\n", ret6);
return 0;
}
7. strncpy strncat strncmp 函数都是多了一个参数
可以自定义拷贝多少字符,拼接多少字符,比较多少字符
//strncmp 函数 字符串比较
//int strncmp ( const char * str1, const char * str2, size_t num );
// 比较字符串1 比较字符串2 比较的数量
int main()
{
char str1[] = "abcdefk";
char str2[] = "abcdefk";
int ret = strncmp(str1, str2, 7);
printf("%d\n", ret);
return 0;
}
// strncpy 函数 拷贝
// char* strncpy(char* destination, const char* source, size_t num);
// 拷贝的目标 拷贝的对象 拷贝的数量
int main()
{
char ch1[] = "abcdef";
char ch2[20] = { 0 };
strncpy(ch2, ch1, 7);
printf("%s", ch2);
return 0;
}
//strncat 函数 追加
//char* srtncat(char* destination, const char* source, size_t num);
// 追加的目标 追加的对象 追加的数量
int main()
{
char ch1[100] = "hello ";
char ch2[] = "ouyang niuma";
strncat(ch1, ch2, 12);
printf("%s", ch1);
return 0;
}
8. strstr的使用和实现
作用:用来查找字符串1是否含有字符串2
包含头文件 #include <string.h>
函数原型:const char * strstr ( const char * str1, const char * str2 );
char* strstr(char* str1, const char* str2);
char* my_strstr(const char* str1, const char* str2)
{
const char* cur = str1;
const char* s1 = NULL;
const char* s2 = NULL;
if (*str2 == NULL)
{
return (char*)str1;
}
while (*cur)
{
s1 = cur;
s2 = str2;
while (*s1 != NULL && *s2 != NULL && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char*)cur;
}
cur++;
}
}
int main()
{
char str1[] = "abbbcdef";
char str2[] = "bbc";
char* ret1 = strstr(str1, str2);
char* ret2 = my_strstr(str1, str2);
printf("ret1 = %s\n", ret1);
printf("ret1 = %s\n", ret2);
return 0;
}
8. strtok的使用和实现
作用:分割字符串
包含头文件 #include <string.h>
函数原型:char * strtok ( char * str, const char * sep);
int main()
{
char ch[] = "192.168.6.111";
char* sep = ".";
char* str = NULL;
for (str = strtok(ch, sep); str != NULL; str = strtok(NULL, sep))
{
printf("%s\n", str);
}
return 0;
}