C语言-基础入门-学习笔记(9):字符串处理函数

C语言-基础入门-学习笔记(9):字符串处理函数

一. 输入/输出函数

putchar函数和getchar函数,它们提供了字符的输入和输出操作;puts函数和gets函数,它们提供了字符串的输入和输出操作。

1.字符输入/输出函数

putchar函数的作用是向标准输出打印一个字符。使用方法如下:

char c;
putchar(c);

getchar函数的作用是从标准输入以字符型形式读入值赋值给一个字符。使用方法:

char c;
c = getchar();

范例1

#include <stdio.h>

int main(void){
	char c = 0;

	printf("Please input a character:");
	c = getchar();
/*等效于printf("c = %$d\n",c)*/
	putchar('c');
	putchar(' ');
	putchar('=');
	putchar(' ');
	putchar(c);
	putchar('\n');

	return 0;

}

在这里插入图片描述

2.字符串输入/输出函数

puts函数的作用是向标准输出打印一个字符串。使用方法如下:

char str[] = "Linux Terminal";
puts(str);

str的有效内容直到检测到第一个’\0’。如果函数执行成功,该函数的函数值为一个非负数,否则返回值为EOF。

gets函数的作用是从标准输入读取一个字符串赋给其他参数。

char str[20] = "\0";
gets(str);

str的有效内容一直到检测到一个’\n’或EOF。str只能获取其有效空间内的字符,超出去的会产生比较麻烦的后果。
范例2

#include <stdio.h>
#define SIZE 20

int main(void){
	char str[SIZE] = "\0";
	int i = 0;

	gets(str);

	i = puts(str);
	printf("i = %d\n",i);

	return 0;
}

在这里插入图片描述

二.复制和拼接函数

strcpy函数和strncpy函数实现字符串复制的功能。
strcat函数和strncat函数实现了字符串拼接的功能。

1.字符串复制函数

字符串复制的标准形式如下:

strcpy(str1,str2);

执行语句后,strncpy函数会将字符串str2复制到字符串str1中。因此str2的值不能超过str1的有效内存空间。
范例3

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

#define MAX_LENGTH 20

int main(void){
	char str1[] = "It is hot!";
	char str2[MAX_LENGTH] = "\0";
	char str3[] = "Nice to meet you!";

	printf("The length of str1: %d\n",sizeof(str1));

	printf("The length of str3: %d\n",sizeof(str3));

	strcpy(str2,str3);
	printf("str2:[%s]\n",str2);

	strcpy(str1,str3);
	printf("str1:[%s]\n",str1);
	printf("str2:[%s]\n",str2);

	return 1;
}

在这里插入图片描述
由于str2的范围大于str3,所以将str3复制到str2中可以;而str1的范围小于str3,所以将str3复制到str1会出现问题。

strncpy函数可以选择将str2的前n个字符复制到str1的前n个字符空间。如果str2有效字符不足n个,那么该函数会将str1的其余空间复制为’\0’。

strncpy(str1,str2,n)

在使用时要保证n不能大于str1所占的内存大小。
范例4

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

int main(void){
	char str1[] = "long time";
	char str2[] = "long time";
	char str3[] = "LONG\0TIME";

	int i = 0;
	int len1 = strlen(str1);
	int len3 = strlen(str3);

	printf("strlen(str1) = %d\n",len1);
	printf("strlen(str3) = %d\n",len3);

	strncpy(str1,str3,strlen(str1));
	strncpy(str2,str3,strlen(str3));

	putchar('[');
	for(i=0;i<len1;i++)
		putchar(str1[i]);
	puts("]");

	putchar('[');
	for(i=0;i<len1;i++)
		putchar(str2[i]);
	puts("]");

	return 0;

}

在这里插入图片描述

2.字符串拼接函数

strcat函数strncat函数提供了字符串拼接功能。函数声明如下:

char * strcat(char * str1,char * str2);
char * strncat(char *str1,char * str2,int n);

将str2的有效字符拼接到str1的有效字符后面,因此str1的空间要足够存储str1和str2的所有有效字符。 strncat是将str2的前n个字符复制到str1的后面。
范例5

#include <stdio.h>
#include <string.h>
#define SIZE 20

int main(void){
	char str1[SIZE] = "A\0A";
	char str2[SIZE] = "BBB";

	strcat(str1,str2);
	puts(str1);

	strcat(str1,str2,2);
	puts(str1);

	return 0;
}

在这里插入图片描述

三.比较和转换函数

1.字符串比较函数

字符串之间不能用关系操作符直接进行比较。C语言中为了比较两个字符串大小使用strncmp函数,标准形式如下:

strncmp(str1,str2,n);

执行此函数,会比较字符串str1和str2的前n个字符。比较规则如下:

  • 将两个字符串从左向右逐个字符相对比,直到出现第一个不相等的字符或遇到’\0’位置。
  • 字符大小判断以ASCII码值为准。
  • 如果两个字符串的所有字符都相等,则两个字符相等。
  • 当str1大于str2,i为一正整数;小于为一负整数;等于为0。

使用strncmp函数需要包含头文件string.h
范例6

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

int main(void){
	char str1[] = "long time";
	char str2[] = "long time";
	char str3[] = "lonG time";

	int length = strlen(str1);

	printf("str1 = \"%s""\n",str1);
	printf("str2 = \"%s""\n",str2);
	printf("str3 = \"%s""\n",str3);

	printf("strncmp(str1,str2,%d) = %d\n",length,strncmp(str1,str2,length));
	printf("strncmp(str3,str1,%d) = %d\n",length,strncmp(str3,str1,length));
	printf("strncmp(str1,str3,%d) = %d\n",length,strncmp(str1,str3,length));
	printf("strncmp(str1,str2,3) = %d\n",length,strncmp(str1,str3,3));

	printf("g - G = %d\n",'g'-'G');

	return 0;
}

在这里插入图片描述

2.字符串转换函数

strupr函数将字符串中的所有小写字母转换成大写字母。
strlwr函数将字符串中的所有大写字母转换成小写字母。

strupr(str1);
strlwr(str2);

这两个函数操作的结果都保存在原字符数组上,两个函数的返回值都是字符数组的首地址。
范例7

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

int main(void){
	char str1[] = "Great Wall";
	char str2[] = "Great Wall";

	puts(str1);
	printf("strupr-->");
	puts(strupr(str1));
	printf("strlwr-->");
	puts(strlwr(str2));

	return 0;
}

在这里插入图片描述
练习1

//使用getchar函数实现一个函数,要求其功能与gets函数一致。
#include <stdio.h>
#include <string.h>
#define SIZE 20

char * my_gets(char * str){
	char c = 0;
	c = getchar();

	while(c != ' '
		&& c != '\t'
		&& c != '\0'){
		*str++ = c;//保存到字符串
		c = getchar();//读取第一个字符
	}
	return str;
}

int main(void){
	char str1[SIZE] = "\0";
	my_gets(str1);
	puts(str1);
	return 0;
}

在这里插入图片描述
练习2

//使用putchar函数实现一个函数,要求其功能与puts函数一致。
#include <stdio.h>
#include <string.h>
#define SIZE 20

void my_puts(char * str){
	while(* str != '\0')//若不等于终止符
		putchar(*str++);//打印当前字符
	printf("\n");
}

int main(void){
	char str1[SIZE] = "Barbe a papa";//定义第一个字符串
	my_puts(str1);
	return 0;
}

在这里插入图片描述
在C程序中,可以用两种方法访问一个字符串:(1)用字符数组存放一个字符串,然后输出该字符串;(2)用字符指针指向一个字符串。

最后两个练习都是通过指针访问字符串的方法来表示字符串,具体格式如下:

char *str = "hello C language";

在这里没有定义字符数组,在程序中定义了一个字符指针变量str,用字符串常量“hello C language"对它初始化。C语言对字符串常量是按字符数组处理string的,在内存中开辟了一个字符数组用来存故该字符串常量。对字符指针C变量str初始化,实际上是把字符串第1个元素的地址(即存放字符串的字符数组的首元素地址)赋str。在输出项中给出字符指针变量名str,则系统先输出它所指向的一个字符数据,然后自动使str加1,使之指向下一个字符,然后再输出一个字符…如此直到遇到字符串结束标志’\0’为止。

发布了55 篇原创文章 · 获赞 76 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42826337/article/details/102890836
今日推荐