C语言基础语法2

本篇blog主要讲解C语言中的字符串、指针、结构体。

目录

 

1.字符串

 2.指针

 3.结构体


1.字符串

学习字符串前,我们思考一个字符数据输入的问题:如何先存入一个整形变量a,然后在存储一个字符变量b?(注:回车符也属于字符变量)

#include<stdio.h> 

int main(){       
	int a;
	char b;
	//首先赋值整形变量
	scanf("%d",&a);
	
	//其次,如何防止读取换行符
	//1.getchar()读取换行符
	getchar();
	scanf("%c",&b);
	
	//2.赋值抑制符
	scanf("%*c%c",&b);
	
	//3.scanf中使用空格符
	scanf(" %c",&b);
	
	printf("%d %c",a,b);
}

接下来是字符中常用的函数 

 

#include<stdio.h> 
#include<ctype.h>

int main(){       

	//ctype.h 头文件包含常用的函数是->toupper() tolower()
	char a='c';
	char b='C';
	//将小写字母变成大写字母 / 将大写字母变小写字母
	printf("%c %c",toupper(a),tolower(b));
	
	return 0;
}

在C语言中是没有字符串这种数据类型的,我们通常是使用一个字符数组来存储字符串,而尤其应该注意的是,字符数组的末尾是有一个空字符'\0'。
#include<stdio.h> 
#include<string.h>

int main(){       

	char str[10];
	char str1[11];
	
	//scanf("%s"); 不能读取空字符
	gets(str);
	gets(str1);
	
	//1.strlen() 求字符串长度
	printf("%d\n",int(strlen(str)));
	
	//2.strcpy() 复制str1替代str
	strcpy(str,str1);
	printf("%s\n",str);
	// strncpy() 复制str1的前3位替代str的前三位
	strncpy(str,str1,3);
	printf("%s",str);
	
	//3.strcmp(str,str1) 比较str和str1的大小 前者大返回正数 后者大返回负数 相等返回0
	//  strncmp(str,str1,n) 比较str和str1前n位的大小
	
	//4.strcat(str,str1) 合并str1到str的末尾 要注意:str必须有充足的空间
	//  strncat(str,str1,n) 合并str1的前n的字符到str的末尾、
	
	//5.strrev(str) 将str倒置 
	
	return 0;
}

 下面写一个经典题目,求一个字符串中的单词个数:

#include<stdio.h>
#include<string.h>
int main(){
	
	char str[500];
	//因为要读取字符串 肯定存在空格 所以使用str
	gets(str);
	
	int sum;
	for(int i=0;str[i]!='\0';i++){
		if(str[i]!=' ' && str[i+1]==' '){
			sum++;
		}
	}
	
	//判断最后一个位置是否是单词
	int length=strlen(str);
	if(str[length-1] != ' ') sum++;
	
	printf("%d",sum);
	
	return 0;
}

额外补充一个头文件:#include<stdio.h>的函数

#include<stdio.h>
int main(){
	
	//相当于将从键盘上的输入和输出 改到程序中
	
	char str[100];
	char str1[100];
	//将结果输出到str字符串中
	sprintf(str,"Price is %d",99);
	printf("%s",str);
	
	gets(str1);
	int a,b,c;
	//从str1字符串中输入数值
	sscanf(str1,"%*1d%4d%2d%2d%*d",&a,&b,&c);
	printf("%d%d%d",a,b,c);
	
	
	return 0;
}

 2.指针

指针这个东西,枯燥乏味,较难理解,但其实弄懂了也还可以。无非就是,*是获取存储对象,&是取地址

 

#include<stdio.h>
int main(){
	
	//我们首先 确定一个整型变量 和指针变量 注:现在并不进行赋值;
	int a=233;
	int *p; 
	
	printf("%p\n",&a); //输出a的地址;
	printf("%p\n",&p); //输出p的地址;
	//但此时如果运行 printf("%p",p); 是会报错的 ;
	//因为 p存储的是 指向的变量的地址 此时并未令p=&a; 所以p为空;
	
	p=&a;
	//此时p指向a 那么p->是a的地址;
	printf("%p\n",p);
	//*p->&a所对应的值
	printf("%d\n",*p);
	//&p->p的地址
	printf("%p\n",&p);
	
	return 0;
}

指针的作用是什么?

我的浅薄之见是->传递数据的地址,高效且节省内存

下面出个简单的指针的题,指针常用到函数里里面:

#include<stdio.h>

void unpointer(int a,int b){
	a=a+1;
	b=b+2;
}

void pointer(int *a, int *b){
	*a=*a+1;
	*b=*b+2;
}

int main(){
	
	int a=3,b=2;
	unpointer(a,b);
	printf("%d %d\n",a,b); //我们发现虽然在unpointer()中对a,b的值进行改变,但输出仍不变
	
	pointer(&a,&b);
	printf("%d %d\n",a,b); //通过指针来映射 可以达到在函数中更改局部变量
	
	return 0;
}

 3.结构体

结构体的作用是什么?

想象一下,如果现在一个需求,让你统计一个班里所有人的姓名、身高、体重,存储到一维数组、二维数组都是不现实的,所以我们就引申出了结构体:

#include<stdio.h>

typedef struct student{
	char name[30];
	int age;
	char sex[10];
}Stu;

int main(){
	
	Stu students = {"Zsx",30,"man"};
	
	printf("%s\n",students.name);
	printf("%d\n",students.age);
	printf("%s",students.sex);
	
	return 0;
}

 今天就差不多写完了C语言的基础知识,即在以后算法上会用到的知识。从明天起就更新算法方面的知识和题。博主是个算法小菜菜,今年四月份的蓝桥杯获得一个省二,可能就对了6道题左右,希望可以和大家一起进步。   --2022.6.18

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值