【零基础C语言】字符函数和字符串函数

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;
}

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值