C字符串函数介绍(strlen,strcmp,strcat,strcpy,strncat,strncpy,strerror,memcpy,memcmp,memmove,字符处理函数)

C字符串函数介绍

1、strlen

size_t	strlen(const char *str);

f返回字符串str的长度,不包含‘\0’

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//计算字符串长度,不包含\0  返回无符号整形
int main()
{
	const char *str1 = "abcdef";
	const char *str2 = "abc";
	if (strlen(str1) > strlen(str2))
	{
		printf("str1 > str2\n");
	}
	else
	{
		printf("str1 < str2");
	}
	system("pause");
	return 0;
}

2、strcpy

char* strcpy(char *destination, const char *source);

将source复制到destination中 destination必须足够大

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//strcpy  将source复制到destination中   destination必须足够大
int main()
{
	char str1[] = "sample string";
	char str2[20];
	char str3[40];
	strcpy(str2, str1);
	strcpy(str3, "copy successful");
	printf("%s\n", str1);
	printf("%s\n", str2);
	printf("%s\n", str3);
	system("pause");
	return 0;
}

3、strcat

char* strcat(char *destination, const char *source);

将source追加到destination中 destination必须足够大

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//strcat  将source追加到destination中
int main()
{
	char ch[20] = "\0";
	strcat(ch, "I ");
	strcat(ch, "am ");
	strcat(ch, "a ");
	strcat(ch, "student!");
	puts(ch);

	putchar("\n");

	char str[80] = "\0";
	strcpy(str, "these ");
	strcat(str, "strings ");
	strcat(str, "are ");
	strcat(str, "concatenated.");
	puts(str);
	system("pause");
	return 0;
}

4、strcmp

int strcmp(const char *str1, const char *str2);

比较两个字符串是否相等,相等返回0 前者大返回正数,后者大返回负数

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//strcmp  比较两个字符串是否相等,相等返回0  前者大返回正数,后者大返回负数
int main()
{
	const char *str1 = "abcde";
	const char *str2 = "abcd";
	if (strcmp(str1, str2) == 0)
	{
		printf("str1 == str2\n");
	}
	else if (strcmp(str1, str2) >=0)
	{
		printf("str1 >= str2\n");
	}
	else
	{
		printf("str1 <= str2\n");
	}

	system("pause");
	return 0;
}

5、strncpy

char* strncpy(char *destination, const char *source,  size_t num);

从source拷贝num个字符到destination

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//strncpy  从source拷贝num个字符到destination
int main()
{
	char str1[] = "sample string";
	char str2[20] = "\0";
	char str3[40] = "\0";
	strncpy(str2, str1, 7);
	strncpy(str3, "copy successful", 5);
	puts(str1);
	puts(str2);
	puts(str3);
	system("pause");
	return 0;
}

6、strncat

char* strncat(char *destination, const char *source, size_t num);

从source中追加num个字符到destination

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//strncat  从source中追加num个字符到destination
int main()
{
	char str1[20] = "\0";
	char str2[20] = "\0";
	strcat(str1, "abcdef");
	strcat(str2, "abc");
	strncat(str1, str2, 2);
	puts(str1);
	system("pause");
	return 0;
}

7、strncmp

int strncmp(const char *str1, const char *str2, size_t num);

比较两个字符前num个字符是否一致 一致返回0,前者大返回正数,后者大返回负数
这个函数开始比较每个字符串的第一个字符。
如果它们彼此相等,则继续执行以下操作,
直到字符不同为止,直到到达一个终止的空字符,
或者直到两个字符串中的num字符匹配为止
(以先发生的情况为准)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


//strncmp  比较两个字符前num个字符是否一致   一致返回0,前者大返回正数,后者大返回负数
/*
这个函数开始比较每个字符串的第一个字符。
如果它们彼此相等,则继续执行以下操作,
直到字符不同为止,直到到达一个终止的空字符,
或者直到两个字符串中的num字符匹配为止
(以先发生的情况为准)*/
int main()
{
	char str[][5] = { "R2D2", "C3PO", "R2A6" };
	int n;
	puts("Looking for R2 astromech droids...");
	for (n = 0; n < 3; n++)
	if (strncmp(str[n], "R2xx", 2) == 0)
	{
		printf("found %s\n", str[n]);
	}
	system("pause");
	return 0;
}

8、strstr

char* strstr(const char *str1, const char *str2);

查找子字符串
返回一个指向str1中第一次出现的str2的指针,如果str2不是str1的一部分,则返回一个空指针。
匹配过程不包括终止的空字符,但它就到此为止。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//查找子字符串 
//返回一个指向str1中第一次出现的str2的指针,如果str2不是str1的一部分,则返回一个空指针。
//匹配过程不包括终止的空字符,但它就到此为止。
int main()
{
	char str1[] = "This is a simple string";
	char *pstr;
	pstr = strstr(str1, "simple");
	strncpy(pstr, "simple", 6);
	puts(str1);
	system("pause");
	return 0;
}

9、strtok

char * strtok ( char * str, const char * delimiters );

将字符串按delimiters 分隔为令牌

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#if 0
//strtok 将字符串按delimiters 分隔为令牌
int main()
{
	char str[] = "-This , a sample strling.";
	char *pstr;
	printf("splitting string \ %s \"into tokens:\n", str);
	pstr = strtok(str, ",.-");
	while (pstr != NULL)
	{
		printf("%s\n", pstr);
		pstr = strtok(NULL, ",.-");
	}
	system("pause");
	return  0;
}
#endif

#if 0
int main()
{
	char *p = "[email protected]";
	const char* sep = ".@";
	char arr[30];
	char *str = NULL;
	strcpy(arr, p);//将数据拷贝一份,处理arr数组的内容
	for (str = strtok(arr, sep); str != NULL; str = strtok(NULL, sep))
	{
		printf("%s\n", str);
	}
	system("pause");
	return  0;
}
#endif

10、strerror

char* strerror(int errnum);

返回错误码,所对应的错误信息

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

//strerror返回错误码,所对应的错误信息
int main()
{
	FILE *pFile;
	pFile = fopen("unexist.ent", "r");
	if (pFile == NULL)
	{
		printf("Error opening file unexist.ent:%s\n", strerror(errno));
		//errno:Last error number
	}
	system("pause");
	return 0;
}

11、字符分类函数

函数 如果他的参数符合下列条件就返回真
iscntrl 任何控制字符
isspace 空白字符:空格‘ ’,换页‘\f’,换行’\n’,回车‘\r’,制表符’\t’或者垂直制表符’\v’
isdigit 十进制数字 0~9
isxdigit 十六进制数字,包括所有十进制数字,小写字母af,大写字母AF
islower 小写字母a~z
isupper 大写字母A~Z
isalpha 字母az或AZ
isalnum 字母或者数字,az,AZ,0~9
ispunct 标点符号,任何不属于数字或者字母的图形字符(可打印)
isgraph 任何图形字符
isprint 任何可打印字符,包括图形字符和空白字符
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//towler 转换为小写字母
//toupper 转换为大写字母
int main()
{
	int i = 0;
	char str[] = "I AM A STUDENT!\n";
	char c;
	while (str[i])
	{
		c = str[i];
		if (isupper(c))
		{
			c = tolower(c);
		}
		putchar(c);
		i++;
	}
	system("pause");
	return 0;
}

12、memcpy

void* memcpy(void *destination, const void *source, size_t num);

将source位置开始向后复制num个字节得到数据到destination中。
memmove和memcpy的区别是memcpy处理源内存块和目标内存块的时候不可以重叠,若是发生重叠,导致复制结果未定义。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//将source位置开始向后复制num个字节得到数据到destination中。
//memmove和memcpy的区别是memcpy处理源内存块和目标内存块的时候不可以重叠,若是发生重叠,导致复制结果未定义。
struct Student
{
	char name[20];
	int age;
}person, person_copy;

int main()
{
	char myname[] = "Pierre de Fermat";

	/*using memcpy to copy string:*/
	memcpy(person.name, myname, sizeof(myname) + 1);
	
	person.age = 23;
	/*using memcpy to copy structure:*/
	memcpy(&person_copy, &person, sizeof(person));

	printf("person_copy:%s,%d\n", person_copy.name, person_copy.age);
	system("pause");
	return 0;
}

13、memmove

void* memmove(void *destination, const void *source, size_t num);

将source位置开始向后复制num个字节得到数据到destination中。
memmove和memcpy的区别是memmove处理源内存块和目标内存块的时候可以重叠

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//将source位置开始向后复制num个字节得到数据到destination中。
//memmove和memcpy的区别是memmove处理源内存块和目标内存块的时候可以重叠
int main()
{
	char str[] = "memmove can be very useful……";
	memmove(str + 20, str + 15, 11);
	puts(str);
	system("pause");
	return 0;
}

14、memcmp

int memcmp(const char *str1, const char *str2, size_t num);

比较两个字符串的前num个字符是否相等,相等返回0,str1>str2返回1,str1<str2返回-1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	char buffer1[] = "DWgaOtP12df0";
	char buffer2[] = "DWGAOTP12DF0";
	int n;
	n = memcmp(buffer1, buffer2, sizeof(buffer1));
	if (n > 0)
	{
		printf("'%s' is greater than '%s'.\n", buffer1, buffer2);
	}else if (n<0)
	{
		printf("'%s' is less than '%s'.\n", buffer1, buffer2);
	}
	else
	{
		printf("'%s' is the same as '%s'.\n", buffer1, buffer2);
	}
	system("pause");
	return 0;
}
发布了117 篇原创文章 · 获赞 48 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/gp1330782530/article/details/104476979
今日推荐