문자열 관련 기능

1. 문자열의 길이를 찾는 함수

strlen

2. 무제한 길이의 문자열 함수

strcpy

strcmp

strcat

3. 제한된 길이의 문자열 함수

strncpy

strncat

strncmp

네, 문자열 검색

strstr

Strtok

다섯, 오류 정보 보고서

공포

 

 

 

 

1. 문자열의 길이를 찾는 함수

strlen

노트:

1. strlen 함수는 문자열에서 '\ 0'앞에 나오는 문자 수를 반환합니다 ( '\ 0'제외).

2. 함수의 매개 변수 유형은 char 유형의 포인터이고 반환 값은 size_t (부호없는 정수)입니다.

3. 반환 값이 size_t이므로 함수의 반환 값을 비교하거나 계산할 수 없습니다.

 

(Dig a hole) strlen의 아날로그 구현 (1. Counter 방법 2. Recursive 방법 3. 포인터 마이너스 포인터 방법)

 

 

2. 무제한 길이의 문자열 함수

 

1. 문자열 복사 기능

strcpy

참고 : 1. 대상 공간이 충분히 큰지 확인하십시오.

           2. 대상 공간은 가변적이어야하므로 첫 번째 매개 변수 앞에 const를 추가 할 수 없습니다.

매개 변수 유형 : 1.char * strDestination

                  2.char * strSource

반환 유형 : char *

 

strcpy의 시뮬레이션 된 구현

일반 버전 (헤더 파일) :

//strcpy的模拟实现
void my_strcpy(char *dest, char *src)
{
	while (*src != '\0')
	{
		*dest = *src;
		src++;
		dest++;
	}
	*dest = *src;
}
int main()
{
	char arr1[20] = "#########";
	char arr2[20] = "hello world";
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

프리미엄 버전 :

//strcpy的模拟实现
#include<string.h>
#include<assert.h>
char* my_strcpy(char *dest,const char *src)
{
	assert(dest && src);//断言,提高指针的安全性
	char *ret = dest;
	while (*dest++ = *src++)//字符串的拷贝,先拷贝,后++,当把'\0'也拷贝过去后,括号里表达式结果为0,为假,跳出循环
	{
		;
	}
	return ret;//返回目标空间的起始地址
}
int main()
{
	char arr1[20] = "#########";
	char arr2[20] = "hello world";
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

 

2. 문자열 추가 기능

strcat

참고 : 1. 추가 할 대상 공간은 충분히 커야합니다.

           2. 추가 할 공간은 수정 가능해야합니다.

           3. 대상 문자열과 소스 문자열에는 '\ 0'이 있어야합니다.

           4. 자신에게 추가 할 수 없습니다.

매개 변수 : 1.char * strDestination

           2.char * strSource

반환 유형 : char *

시뮬레이션 구현

//strcat的模拟实现
#include<assert.h>
char* my_strcat(char *dest, const char *src)
{
	assert(dest && src);
	char *ret=dest;
	//1.找到目标字符串的'\0'
	while (*dest)
	{
		dest++;
	}
	//2.追加
	while (*dest++ = *src++);
	{
		;
	}
	return ret;
}
int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "world";
	
	printf("%s\n", my_strcat(arr1, arr2));
	return 0;
}

 

3. 문자열 비교 기능

strcmp

노트:

1. 비교는 문자열의 길이가 아니라 해당 문자의 ASCII 코드 값입니다.

2. 전자> 후자는 숫자> 0, 전자 = 후자는 0, 전자 <후자는 숫자 <0을 반환합니다.

 

매개 변수 : 1.char * str1

           2.char * str2

반환 유형 : int

시뮬레이션 구현

//strcmp的模拟实现
#include<assert.h>
int my_strcmp(const char *s1, const char *s2)
{
	assert(s1 && s2);
	while (*s1 == *s2)
	{
		if (*s1 == '\0')
			return 0;
		s1++;
		s2++;
	}
	return *s1 - *s2;
}
int main()
{
	char arr1[10] = "abc";
	char arr2[10] = "abcde";
	int ret = my_strcmp(arr1, arr2);
	printf("%d\n", ret);
	return 0;
}

 

 

3. 제한된 길이의 문자열 함수 (제한된 함수와 비교하여 작동 할 문자 수를 기록하는 데 사용되는 매개 변수 size_t count가 하나 더 있습니다)

무제한 길이 기능과 유사하게 더 간단하고 설명이 많지 않습니다.

 

네, 문자열 검색 기능

1. strstr (부분 문자열 찾기)

찾을 수있는 상황 :

//strstr查找子串函数
#include<string.h>
int main()
{
	char arr1[20] = "abcdef";
	char arr2[20] = "bcde";
	char *ret = strstr(arr1, arr2);//在arr1中查找arr2第一次出现的位置,并返回arr1中第一个被查找的字符的首地址,将该地址打印后可打印出arr1从该字符起之后的字符串
	printf("%s\n", ret);//bcdef
	return 0;
}

찾을 수 있는지 판단하십시오.

//strstr查找子串函数
#include<string.h>
int main()
{
	char arr1[20] = "abcdef";
	char arr2[20] = "bcde";
	char *ret = strstr(arr1, arr2);//在arr1中查找arr2第一次出现的位置,并返回arr1中第一个被查找的字符的首地址,将该地址打印后可打印出arr1从该字符起之后的字符串
	if (ret != NULL)
		printf("%s\n", ret);//bcdef
	else
		printf("找不到\n");
	return 0;
}

 

시뮬레이션 구현 (어려움)

//strstr模拟实现
#include<assert.h>
char* my_strstr(const char *s1,const char *s2)
{
	assert(s1 && s2);//断言
	const char *cp = s1;

	if (*s2 == '\0')
		return (char*)s1;//特殊情况

	while (*cp)//判断*cp是否等于\0
	{
		const char *p1 = cp;
		const char *p2 = s2;
		while ((*p1) && (*p2) && (*p1 == *p2))
		{
			p1++;
			p2++;
		}
		if (*p2 == '\0')
			return (char*)cp;

		cp++;
	}
	return NULL;
}
int main()
{
	char arr1[20] = "abbbcdef";
	char arr2[20] = "bbc";
	char *ret = my_strstr(arr1, arr2);
	if (ret != NULL)
		printf("%s\n", ret);
	else
		printf("找不到子串\n");
	return 0;
}

 

2.strtok (컷 스트링)

char * strtok ( char * str , const char * sep );
 
매개 변수 : 1. 절단 할 문자열
           2. 분할 표시
반환 값 : 매번 분할 문자열의 첫 번째 주소를 반환합니다.
 
일반적인 사용법은 다음과 같습니다.
//strtok
#include<string.h>
int main()
{
	char arr1[30] = "123456.3.haha@qq";
	char arr2[30] = { 0 };
	char p[30] = ".@";
	strcpy(arr2, arr1);//将arr1拷贝到arr2,使得arr1得以保留,我们操作arr2
	char *ret;//接收strtok函数的返回值,为一个指针
	//用循环的方式打印,第一次调用的时候第一个参数传参要传字符串,之后只用传空指针就可以
	for (ret = strtok(arr2,p); ret != NULL; ret = strtok(NULL, p))
	{
		printf("%s\n", ret);
	}
	return 0;
}

strtok 함수의 이상한 점은 처음 호출 될 때 첫 번째 매개 변수가 문자열로 전달되고 나서 널 포인터 만 전달된다는 것입니다. 이것은 static의 결과이며 strtok 함수가 호출 될 때마다 유지됩니다. 원래 포인터의 위치와 그것이 열었던 메모리는 호출이 끝날 때 파괴되지 않습니다.

 

다섯, 오류보고 기능

공포

기능 : 오류 코드를 해당 오류 메시지로 변환하고 오류 메시지에 해당하는 문자열의 시작 주소를 반환합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

추천

출처blog.csdn.net/qq_52454367/article/details/113893400