Day 21 字符串

字符串
字符串的本质是字符数组

char ch[]={ };
char ch[]=" ";

字符串以\0作为结束的标志,这样以后可以用\0当作一个判断条件,没有写\0系统会自动补一个\0
sizeof是求空间大小,也包括结束标志

strlen计算字符串的实际长度,不包括结束标志\0 

字符串的输入输出又三种办法,两两对应,不过也能混着用

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

int main()
{
	char ch[30] = {'\0'};
	//从键盘输入字符串的方法 
	//1.
	for(int i = 0; i < 10; i++)
	{
		scanf("%c", &ch[i]);
	}
	//2.
	scanf("%s", ch);
	//3.
	gets(ch);
	
	//从键盘输出字符串的方法
	//1. 
	for(int i = 0; i < strlen(ch); i++)
	{
		printf("%c", ch[i]);
	}
	//2.
	printf("%s", ch);
	//3.
	puts(ch);
}

当要修改字符串内容的时候

不能用指针,需要用到strcpy函数

#include<stdio.h>

int main()
{
	char ch[100] = "我要把他mua醒!";
	char *pch = ch;
//	gets(ch);
	puts(pch); 
	pch = "他为什么要去塔里啊!下路叫我去我怎么去啊!";
//	printf("%s", pch);
	//要修改字符数组中的内容,用strcpy函数 
	strcpy(ch, "他为什么要去塔里啊!下路叫我去我怎么去啊!");
	puts(pch);//指针不能修改字符数组中的内容 
	puts(ch);
	
	
	
	return 0;
}

 一个字符有多种输入方法

带回显功能:getchar(), getche(),第二种虽然带回显但是不会等你按回车换行就直接输入了

不带回显功能:getch(),一按就输出结果

fgets(保存位置,长度,文件描述符)
文件描述符:stdin标准输入,stdout标准输出,stderr标准出错

#include<stdio.h>

int main()
{
	char ch[10];
	char ch1;
	//带回显功能 
//	ch = getchar();
//	ch = getche();//带回显但是不等按回车 
	//不带回显功能;
//	ch = getch();
	
//	fgets(ch, 10, stdin);//stdin是标准输入,stdout是标准输出, strerr标准出错
//	 
//	printf("%s\n", ch); 

//	scanf("%s", ch);//它会把空格 回车 teb当作结束符 
//	printf("%s\n", ch); 

	gets(ch);
	ch1 = getchar();
	printf("%s\n", ch); 
	printf("%c\n", ch1); 
	
	return 0;
}

我们也可以做一个输入函数

当没有按回车的时候,将输入的字符存入字符数组,当计数到达n-1的时候(\0是n)跳出while循环,最后输出这个字符串

void fgets_s(char *pstr, int n)
{
	int count = 0;
	char ch;
	while((ch = getchar()) != '\n')
	{
		 
		*pstr = ch;
		pstr++;
		count++;
		if(count == n - 1)
		{
			break;
		}
	}
	*pstr = '\0';
}

<ctype.h>:
isdigit  是不是数字
isalpha  是不是字母
isalnum 是不是数字或字母
isxdigit 是不是16进制数

islower 是不是小写字母
isupper 是不是大写字母
tolower 转换为小写字母
toupper 转换为大写字母

isspace 是不是空白字符
iscntrl  是不是控制字符
ispunct 是不是一个标点符号
isprint   是不是可以显示到屏幕上的字符包含空格
isgraph  是不是可以显示到屏幕上的字符?不包含空格
<string.h>
复制函数
strcpy(目的地址,原地址)只复制字符串,但不限制数量,很容易溢出,不会检查是否越界
strncry(目的地址,原地址,长度(不能超过目的地址))函数用于将指定长度的字符串进行复制
两个函数都不会检查越界,很容易溢出
 

今天做了个用两个指针逆序输出字符串的练习

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

void turnStr(char *p, int length);

int main()
{
	char ch[8] = "\0";
	gets(ch);
	turnStr(ch, 8);
	puts(ch);
	
	
	return 0;	
} 

void turnStr(char *p, int length)
{
	char temp;
	int s = strlen(p);
	char *pa = &p[0];
	char *pb = &p[s - 1];
	

	for(; s >= 0; pa++, pb--, s--)
	{
		temp = *pa;
		*pa = *pb;
		*pb = temp;
		if(pb <= pa)
		{
			break;
		}
	}	
	}
	

我的思路是用两个指针分别指向第一个和最后一个,然后开始遍历,让后让两个指针指向的数交换,然后指向开头的指针++,指向结尾的指针--,最后再后面的指针小于等于前面指针的时候跳出循环,最后得到逆序字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值