首页 > 其他分享 >字符串函数

字符串函数

时间:2024-08-21 22:25:46浏览次数:9  
标签:函数 int char arr2 arr1 字符串

文章目录

1.strcmp函数

第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字
第⼀个字符串等于第⼆个字符串,则返回0
第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字

strcmp函数的使用:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<assert.h>
int main()
{
	char arr1[] = "abcdef";//两个字符串的比较一个一个相对比较
	char arr2[] = "abcd";
	int s = strcmp(arr1, arr2);
	printf("%d", s);
	return 0;
}

在这里插入图片描述

strcmp函数的模拟实现:

int my_strcmp(const char* p1, const char* p2)
{
	assert(*p1 && *p2);
	while (*p1 == *p2)
	{    
		if (*p1 == '\0')//*p2=='\0'也一样
		{
			return 0;
		}
		p1++;
		p2++;
	}
	return *p1 - *p2;
}
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abcd";
	int s = my_strcmp(arr1, arr2);
	printf("%d", s);
	return 0;
}

想了解strcpy和strcat函数的可以去看前一篇博客

2.strncpy函数

这3个函数相互对应就是有无数量的限制
在这里插入图片描述
在这里插入图片描述

char * strncpy ( char * destination, const char * source, size_t num );
拷⻉num个字符从源字符串到⽬标空间。
如果源字符串的⻓度⼩于num,则拷⻉完源字符串之后,在⽬标的后边追加0,直到num个。

int main()
{
	char arr1[] = "abcdef";
	char arr2[10] = { 0 };
	size_t a = strlen(arr1);
	strncpy(arr2, arr1, 3);//     \0也会拷贝
	for (int i = 0; i < a; i++)
	{
		printf("%c", arr2[i]);
	}
	return 0;
}

在这里插入图片描述

3.strncat函数

char * strncat ( char * destination, const char * source, size_t num );
将source指向字符串的前num个字符追加到destination指向的字符串末尾,再追加⼀个 \0 字符。
如果source指向的字符串的⻓度⼩于num的时候,只会将字符串中到\0 的内容追加到destination指向的字符串末尾。

int main()
{
	char arr1[] = "efghj";
	char arr2[10] = { 'a','b','c','d' };//不能直接"abcd"防止越界访问,arr2也要给足够的空间
	strncat(arr2, arr1, 3);
	char* p = arr2;
	while (*p)
	{
		
		printf("%c", *p);
		p++;
	}
	return 0;
}

在这里插入图片描述
4.strncmp
int strncmp ( const char * str1, const char * str2, size_t num );
⽐较str1和str2的前num个字符,如果相等就继续往后⽐较,最多⽐较num个字⺟,如果提前发现不⼀样,就提前结束,⼤的字符所在的字符串⼤于另外⼀个。如果num个字符都相等,就是相等返回0。

int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abcd";
	int s = strncmp(arr1, arr2,4);
	printf("%d", s);
	return 0;
}

在这里插入图片描述

4.strstr函数

char * strstr ( const char * str1, const char * str2);
函数返回字符串str2在字符串str1中第⼀次出现的位置
字符串的⽐较匹配不包含 \0 字符,以 \0 作为结束标志

strstr函数的使用:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[] = "abcdefdef";
	char arr2[] = "def";
	char* ret = strstr(arr1, arr2);//从arr1中到了第一个arr2中的字符串到\0结束
	if (ret == '\0')
		printf("没找到");
	else
	printf("%s", ret);
	return 0;
}

在这里插入图片描述

strstr函数的模拟现实:

#include<assert.h>
const char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	const char* p1 = str1;
	const char* p2 = str2;
      
	const char* cut = str1;//标记指针开始的位置
	while (*cut)
	{    //完成一次,cut++;继续寻找
		p1 = cut;
		if (*p1 == '\0')
			return str1;//如果p1中只有'\0'直接打印str1
		while (*p2 == *p1)
		{
			p2++;
			p1++;
		}
		if (*p2 == '\0')
			return cut;
		cut++;
	}
	return '\0';
}

int main()
{
	char arr1[] = "abcdefdef";
	char arr2[] = "def";
	char* ret = my_strstr(arr1, arr2);
	if (ret == '\0')
		printf("没找到");
	else
		printf("%s", ret);
	return 0;
}

在这里插入图片描述

5.strtok函数

char * strtok ( char * str, const char * sep);
• sep参数指向⼀个字符串,定义了⽤作分隔符的字符集合
• 第⼀个参数指定⼀个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标记。
• strtok函数找到str中的下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记的指针。(注:
• strtok函数会改变被操作的字符串,所以被strtok函数切分的字符串⼀般都是临时拷⻉的内容并且可修改。)
• strtok函数的第⼀个参数不为 NULL ,函数将找到str中第⼀个标记,strtok函数将保存它在字符串中的位置。
• strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标
记。
• 如果字符串中不存在更多的标记,则返回 NULL 指针。

int main()
{
	char arr1[] = "abcd#efj%gh";
	char arr2[] = "#%";
	char* p = strtok(arr1, arr2);
	printf("%s\n", p);
	return 0;
}

在这里插入图片描述

int main()
{
	char arr1[] = "abcd#efj%gh";
	char arr2[] = "#%";
	char* p = strtok(arr1, arr2);
	printf("%s\n", p);
	p = strtok(NULL, arr2);
	printf("%s\n", p);
	p = strtok(NULL, arr2);
	printf("%s", p);
	return 0;
}

在这里插入图片描述

6.strerror函数

strerror函数可以把参数部分错误码对应的错误信息的字符串地址返回来。
在不同的系统和C语⾔标准库的实现中都规定了⼀些错误码,⼀般是放在 errno.h 这个头⽂件中说明的,C语⾔程序启动的时候就会使⽤⼀个全局的变量errno来记录程序的当前错误码,只不过程序启动的时候errno是0,表⽰没有错误,当我们在使⽤标准库中的函数的时候发⽣了某种错误,就会将对应的错误码,存放在errno中,⽽⼀个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是有对应的错误信息的。strerror函数就可以将错误对应的错误信息字符串的地址返回。

int main()
{
	for (int i = 0; i < 5; i++)
	{
		printf("%s\n", strerror(i));
	}
	return 0;
}

在这里插入图片描述

标签:函数,int,char,arr2,arr1,字符串
From: https://blog.csdn.net/2401_85487314/article/details/141352672

相关文章

  • 字符串信息检测原理代码剖析
    想要用单片机识别一长串字符并执行对应指令,有两种办法:数组法和循环法错误的实例:if(RXDATE=='L') { if(RXDATE=='E') { if(RXDATE=='D') { if(RXDATE=='1') { LED1=0; } if(RXDATE......
  • 正则表达式可以匹配正确的字符串但是不能匹配小美的心
    高情商:省流极简版低情商:怎么连个例子都没有正则表达式常用元字符:. 匹配除换行符以外的任意字符\w 匹配字母或数字或下划线\s 四配任意的空白符\d 匹配数字\n 匹配一个换行符\t 匹配一个制表符^ 匹配字符串的开始$ 匹配字符串的结......
  • 标准IO函数:fprintf和fscanf,fread和fwrite
    1.使用分文件编译,实现注册登录界面,使用fgets,fscanf,fpritnf函数。主函数#include"log.h"intmain(intargc,constchar*argv[]){ intkey; while(1) { printf("**********1.注册**********\n"); printf("**********2.登录**********\n"); printf(&quo......
  • 华为OD机试 - 密码输入检测 字符串
    只在本地跑过,不确保一定对#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#include<string.h>#definesetbit(value,bit)(value=value|(1<<bit))intmain(void){charbuf[201];charout[201];inti=0;int......
  • 字符串学习笔记
    扩展kmp令z[i]代表i之后的字符串与原先字符串的最长公共前缀r为目前get到的最大位置,l为对应的左端点很明显的状态转移比如现在枚举到了i这个位置i在[l,r]的范围内,首先S[l,r]==S[1,r-l+1]于是S[i,r]==S[i-l+1,r-l+1]那么显然z[i]=min(z[i-l+1],r-i+1)不能超过长度假设z[......
  • 粒子群算法求解多元函数拟合问题
    在一元线性回归中,我们使用最小二乘法估计出k与b,这其实就是一个求拟合函数的过程。当一元扩展到多元,我们也可以用最小二乘的思想估计出参数目录一、最小二乘法二、将最小二乘法视为最值问题1.利用有约束的fmincon函数(1)定义目标函数(2)进行求解2.利用无约束最小值函数(1)利用fminsearch......
  • 一门多范式的编程语言Scala学习的第二天-函数的使用
    2.12scala中的函数式编程*scala中的函数式编程**面向对象编程:将对象当作参数一样传来传去*1、对象可以当作方法参数传递*2、对象也可以当作方法的返回值返回*当看到类,抽象类,接口的时候,今后无论是参数类型还是返回值类型,都需要提供对应的实现类对象**面向函数式编程......
  • ast.literal_eval替代eval将字符串形式的表达式解析为 Python 对象
    如果一个字符串表示一个列表,你可以使用Python的ast.literal_eval方法将其转换为真正的列表。ast.literal_eval是一个安全的方法,可以将字符串形式的表达式解析为Python对象。这里是一个例子:importast#字符串形式的列表str_list="[1,2,3,4,5]"#将字符串解析......
  • C++ 函数指针
    C++中函数指针表示指向函数的指针,其作用相当于函数的别名,通过函数指针可以直接调用对应的函数。函数指针有两种表示方式,一种通过typedef进行声明,一种通过新的方式using来进行声明。函数指针所指向的函数,其对应的形参个数、类型与返回值,都应该相同。//FuncPtr1为函数指针,表示一......
  • C++: to_string()函数、stod()函数、atoi()函数
    将整型转换为字符串类型to_string()inti=40;strings=to_string(i);将字符串转换为double:stod()strings='40';doublex=stod(s);atoi函数  用于将C风格的字符串(constchar*类型)转换为整数(int类型)。如果使用atoi函数将字符串"123"转换为整数,会得到整......