c语言字符串操作

(以下操作均需要<string.h>的头文件)ok let`s go!

Part 1.求字符串的长度strlen

const表示不可以修改 指针所指向的内容。

长度为6(找到\0)

ps.利用函数自己做一个strlen!(如下)

​
#include<stdio.h>
unsigned int Mystrlen(const char* str)
{
	int n = 0;//用n来记数,反映字符串的长度
	while (*str!='\0')
	{
		str++;//指针往后偏移扫描至\0结束
		n++;
	}
	return n;
}
int main()
{
	char* str = "Hello \0World";
	printf("%d",Mystrlen(str));
	return 0;
}

​
char* str = "Hello \0World";
	char sz[20] = { 's','f','r','\0' ,'7'};
	printf("%d",strlen(str));
	printf("%d",Mystrlen(sz));
数组名->指针。

Part2.抄一字符串strcpy/strncpy

char* p = "HELLOWORLD";
	char sz[20] = { 'h','s','e','w','9','1','2','3','4','5','6','7','8' };
	strcpy(sz,p);
	printf("%c", sz[1]);

 是copy指针p里面的字符串存到数组sz[]里面,会将前11个也就是hsew9覆盖掉,一共带进来11个字符,因为‘\0’的存在。剩下的7和8保持不动。

注意!!!copy的容器里一定要够放,不然就会造成溢出,后面的内存就会被修改

于是我们可用更安全的strncpy

char* p = "HELLOWORLD";
	char sz[8] = { 'h','s','e','w','1','2','3','4'};
	strncpy(sz,p,7);
	printf("%c", sz[7]);

注意strncpy的用法。7表示copy的字符个数

‘4’并不会被覆盖!‘\0’不会进来

Part3.字符串的连接strcat

	char* str = "HELLOWORLD";
	char sz[100] = { 'h','s','e','w','1','2','3','4'};
	char*p=strcat(sz, str);

注意strcat的写法:左边只能是sz而非str(str是一个字符串常量,没有可以存储的空间!!!)

其次,str里面的字符串会接到sz[ ]之后

而且,连接后的地址任然是sz的原地址,而非新地址!!!

Part4.字符串比较strcmp

	char* str1 = "HELLOWORLD";
	char* str2 = "He3456789";
	if (0 == strcmp(str1, str2))
		printf("str1等于str2");
	else if (strcmp(str1, str2) > 0)
		printf("str1大于str2");
	else
		printf("str1小于str2");

比较的原理:逐个比较,第一个谁大那就结束,谁大。若第一个相同,看第二个,谁大,谁大那就谁大,依次类推。如图str2>str1。

该函数会有返回值:等0 左大于右>0 右大于左<0

Part5.字符查找strchr

	char* str1 = "HELLOWORLD";
	char* p = strchr(str1, 'O');
	printf("%s", p);

此段代码输出OWORLD,由此我们可以看出来这玩意找到第一个之后,后面的字符全会搬下来。

若寻找‘f’(字符串里面根本没有),则它返回一个空指针NULL.

那么,我们可以做一个函数,来索引要找的字符的位置在哪。

#include<stdio.h>
#include<string.h>
int Mystrchr(const char* p, char ch)
{
	int n = 1;//显示该字符的位置。
	while (*p != '\0')
	{
		if (*p == ch)
			return n;
		p++;//指针偏移找字符
		n++;
	}
	return -1;//表示该字符在字符串中并不存在。
}
int main()
{
	char* p = "HelloWorldH";
	int position = Mystrchr(p,'H');
	printf("%d", position);
	return 0;
}

当然只能找到第一个所在位置,第二个不会被返回出来。那该如何做,等我想想问问的!(问!!)

Part6.字符串查找strstr

函数原型char* strstr(char const *str,char const *s2)


	char* p = "HelloWorldH";
	char* k = strstr(p, "lo");
	printf("%s",k);

和strchr一样找到lo后直接把后面搬出来,所以输出loWorldH.

我们同样可以自己用函数实现这个功能。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Ocean__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值