C语言学习第六课(字符和字符串)

第六课

1,字符:用单引号【‘’】括起来;【字符串一定是字符数组,字符数组不一定是字符串】

2,字符串:由字符组成用双引号【“”】括起来;【注意:由‘\0’结尾】

1 字符串都是用字符数组存储的;【】
2 字符数组初始化的两种方式:
{
    1,直接使用逐个字符进行初始化,但不会自动加上'\0';
    2,使用""的方式初始化数组,会自动添加'\0';【注意:数组存储大小足够】
}

3,用指针给字符串赋值和用数组赋值的区别

#include<stdio.h>
int main()
{
   char* a="ABCD";//这里的字符串是常量,无法修改;
   char b[10]="ABCD";//用数组存的字符串是变量,可以修改;
   //a[0]='W';发生错误
   b[0]='W';
   printf("%s",b);//输出 WBCD
   return 0;
}

4,字符数组的输入

1,使用scanf,遇到空格会自动截断,遇到回车结束,并自动加上'\0';【注意:不会进行越界检查】
2,使用gets/get_s,能读取空格,遇到回车结束,自动添加'\0';【注意:输入超出范围时,会进行越界检查】

5,#include<string.h>里的常用函数

#include<stdio.h>
#include<string.h>
int main()
{
   1,strlen(求字符串的实际长度)
     【原型:int Strlen(const char *str)//注意:不含'\0';
     //注意:区别sizeof,sizeof是计算定义变量占用的内存的大小;
   2,strcpy(把后面的字符串复制到前面的数组中)
     【原型:char *strcpy(char *dest, const char *src)//常用于给数组整体赋值
     //注意:strcpy()遇到'\0'会结束且包含'\0';
     //注意:防止越界,确保dest能存下src;
   3,strcmp(字符串比较,前面>后面返回正数,前面<后面返回负数,前面等于后面返回0)
     【原型:int strcmp(const char *str1, const char *str2)//注意:是对每一个字符进行比较,相应的ASCII表上的十进制数      
   4,strcat(把后面的字符串连接到前面的字符串后面)
     【char *strcat(char *dest, const char *src)//注意:防止越界,确保dest能存下src;
   return 0;
}

6,printf与sprintf的区别

#include<stdio.h>
int main()
{
   char str[10]="hallo"; 
   //printf("%s\n",str);直接在屏幕上显示字符串 hallo
   sprintf(str,"hallo %s","world");
   printf("%d",str);//输出了 hallo world
   return 0;
}

7,清屏函数

#include<stdlib.h>
//调用 system("cls");

8,冒泡排序

#include<stdio.h>
int main()
{
	int num[10] = { 5,3,1,4,7,8,6,9,0,2 };
	for (int i = 0; i < 10-1; i++)//i为排序的轮数//若有n个数据则需要 n-1 轮
	{
		for (int k = 0; k < 10-1-i; k++)//k为每一轮比较的次数
		{
			if (num[k]>num[k+1])
			{
				int t = num[k];
				num[k] = num[k + 1];
				num[k + 1] = t;
			}
		}
	}for (int i = 0; i < 10; i++)
	{
		printf("%d ", num[i]);
	}
	return 0;
}
9.字符串逆序
#include<stdio.h>
#include<string.h>
	void reverse()//逆序输出字符串
	{
		char str[] = "I love China";
		int len = strlen(str);
		for (int i = 0; i < len/2; i++)
		{
			char t = str[i];
			str[i] = str[len - 1 - i];
			str[len - 1 - i] = t;
		}
		puts(str);
	}
	int main()
	{
		reverse();
		return 0;
	}

10,模拟密码登录

#include<stdio.h>
#include<string.h>
#include<conio.h>
	void cypher()
	{
		char* userName = "hallo";//原用户名
		char* password = "666666";//原密码
		char Name[50] = "";
		char pswd[50] = "";
		int index=0;
		printf("输入用户名:");
		gets(Name);
		printf("输入密码:");
		while (1)
		{
			char key = _getch();
			if (key=='\r')//'\r'为回车键
			{
				pswd[index] = '\0';
				break;
			}
			else if (key == '\b')//'\b'为退格键
			{
				if (index > 0)
				{
					index--;
				}
				printf("\b \b");
			}
			else
			{
				pswd[index++] = key;
				printf("*");
			}
			
		}
		if (strcmp(userName, Name) == 0 && strcmp(password, pswd) == 0)
		{
			printf("\n登陆成功\n");
			return 666;
		}
		else
		{
			printf("\n登陆失败\n");
		}
	}
	int main()
	{
		cypher();
		return 0;
	}
	```
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值