0
点赞
收藏
分享

微信扫一扫

C语言一维数组及字符串常见处理函数

互联网码农 2022-03-14 阅读 64
c语言

C语言一维数组

一维数组的创建

  • 定义一维数组
    • 数据类型 数组名[数组长度]
int a[10];
char b[10];
float d[10];
double c[10];
//数组长度决定数组可以储存多少个数据
  • 什么是数组呢?

    • 数组就是多个普通变量有规律的连接在一起
      在这里插入图片描述
  • 数组的初始化

    • 定义数组的时候直接赋值
int a[10]={0,1,2,3,4,5,6,7,8,9};//赋值的时候要加{}
int b[10]={0};//将数组内的每个变量全部赋值为0
int c[10]={1,2,3};//将数组的前三个变量分别赋值为1,2,3,后面的变量自动赋值为0
int d[]={1,2,3};//通过后面的赋值自动将数组长度定义为3
  • 2、错误的初始化赋值
//no.1
int a[];//不存在数组长度为0的数组
//no.2
int b[3];
b[3]={1,2,3};//不存在先定义,再初始化赋值
  • 数组的访问
    • 使用for循环逐个访问对应数组下标的变量
    • 数组名[数组下标] 数组下标从0开始,最大值为数组长度减1

一维数组的常规操作

插入

#include<stdio.h>
int main()
{
	int a[10];//定义一个数组
	for(int i=0;i<10;i++)//循环遍历数组
	{
		scanf("%d",&a[i]);//逐个插入
	}
	return 0;
}

查找

#include<stdio.h>
int main()
{
	int a[10]={1,2,3,4,5,6,7,8,9,0};//定义一个数组
	for(int i=0;i<10;i++)//循环遍历数组
	{
		if(a[i]==6)//查找数组内值为6的数组下标
		{
			printf("%d",i);
		}
	}
	return 0;
}

查找+修改

#include<stdio.h>
int main()
{
	int a[10]={1,2,3,4,5,6,7,8,9,0};//定义一个数组
	for(int i=0;i<10;i++)//循环遍历数组
	{
		if(a[i]==6)//查找数组内值为6的变量
		{
			a[i]=666;//将其值修改为666
			break;
		}
	}
	for(int i=0;i<10;i++)
	{
	printf("%d ",a[i]);
	}
	return 0;
}

查找+删除

#include<stdio.h>
int main()
{
	int a[10]={1,2,3,4,5,6,7,8,9,0};//定义一个数组
	int size=10;
	for(int i=0;i<10;i++)//循环遍历数组
	{
		if(a[i]==6)//查找数组内值为6的数组下标
		{
			for(int j=i;j<10;j++)
			{
				a[j]=a[j+1];
			}
			size--;
			break;
		}
	}
	for(int i=0;i<size;i++)
	{
	printf("%d ",a[i]);
	}
	return 0;
}

查找+有序插入

#include<stdio.h>
int main()
{
	int x=3;//定义一个变量x
	int a[10]={1,2,4,9};//定义一个数组
	int size=4;//数组大小
	for(int i=0;i<10;i++)//循环遍历数组
	{
		if(a[i]>3)
		{
			size++;
			for(int j=4;j>i;j--)//将比3大的数后移一位
			{
				a[j]=a[j-1];
			}
			a[i]=3;//再将3插入
			break;//结束插入
		}
	}
	for(int i=0;i<size;i++)
	{
	printf("%d ",a[i]);
	}
	return 0;
}

排序—>冒泡排序

#include <stdio.h>
int main() 
{
	//冒泡排序
	int array[10] = { 60,70,80,90,100,10,20,30,40,50 };
	int curSize = 10;
	//排序
	//int count = 0;
	for (int i = 0; i < curSize; i++)          //每个元素都需要一个机会冒泡
	{
		for (int j = 0; j < curSize-1-i; j++)  //描述每个元素冒泡过程
		{
			//从小到大排序
			if (array[j] > array[j + 1])  //不满足规则交换
			{
				int temp = array[j];
				array[j] = array[j + 1];
				array[j + 1] = temp;
				//count++;
			}
		}
	}
	for (int i = 0; i < curSize; i++) 
	{
		printf("%d\t", array[i]);
	}	
	return 0;
}

字符数组和字符串

  • 字符数组和数字类数组处理方案相同的
  • 字符串: 存在一个不可见字符\0
  • 字符串的打印:用 %s做打印
    • %s的工作原理: 从首地址打印到\0 所以%s对应的是地址
  • 字符数组的定义及初始化
char a[4]={'a','b','c'};
char b[]={'a','b','c'};//自动推断长度为3
char c[]="iloveyou";//字符有一个不可见字符,因此自动推断长度为9
  • 字符数组操作字符串
char array[] = { 'A','B','C' };
char inputstr[] = { 'A','B','C','D','\0','A','B','C' };
//%s对应的是地址
printf("%s\n", &inputstr[0]);    //打印ABCD  即&inputstr[0]到\0
printf("%s\n", &inputstr[2]);	 //打印CD   即&inputstr[2]到\0
printf("%s\n", &array[0]);		 //打印ABC烫烫烫烫烫烫烫烫烫烫烫烫烫烫?

// 数组名代表第一个元素的地址
char output[] = "ILoveyou";
printf("%s\n", output);   //output等同于&output[0]
  • 字符串输入函数
//字符串输入函数: gets:输入+puts:打印
char passw[20];
//所有字符串处理用的数组
gets_s(passw, 20);		//20一般用的是passw的长度
puts(passw);			//自带换行

字符串处理函数(加头文件 #include <string.h>)

  • strcat: 连接

    • 原型:extern char *strcat(char *dest,char *src);
    • 功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的’\0’)并添加’\0’。
    • 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。
  • strcpy:拷贝

    • 原型:extern char *strcpy(char *dest,char *src);
    • 功能:把src所指由NULL结束的字符串复制到dest所指的数组中
    • 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。
  • strcmp:比较

    • 原型:extern int strcmp(char *s1,char * s2);
    • 功能:比较字符串s1和s2。
    • 说明:
      当s1<s2时,返回值<0
      当s1=s2时,返回值=0
      当s1>s2时,返回值>0
  • strlen:统计可见长度

    • 原型:extern int strlen(char *s);
    • 功能:计算字符串s的长度
    • 说明:返回s的长度,不包括结束符NULL
举报

相关推荐

0 条评论