【C语言】数组以及键盘获取字符串

目录

1、一维数组的定义

2、一维数组的初始化

3、选择排序法

 4、二维数组

5、二维数值数组的初始化

6、一维字符数组的初始化

4、字符串函数

5、键盘获取字符数组

6、经典高级字符串题型


1、一维数组的定义

1、步骤:

1、数组名 和 [] 表示数组

2、将数组的个数 放入[]里面

3、用元素的类型 定义一个变量

4、从上 往下 替换。

(1):定义一个数组 有5个元素 每个元素为int

 int arr[5];

(2):定义一个数组 有5个元素 每个元素为int * 

int *arr[5];

(3):定义一个数组 有5个元素 每个元素为数组,该数组有10个元素每个元素为int

int arr[5][10];

(4):定义一个数组 有5个元素 每个元素为函数的入口地址,该函数有两个int型形参, int返回值类型

int (*arr[5])(int, int); 

2、数组名作为类型

sizeof(arr):数组的总空间大小(数组的总空间大小==元素个数*每个元素空间大小)

sizeof(arr[0])==元素大小

sizeof(arr)/sizeof(arr[0])=元素个数

3、数组不初始化内容为随机数 


2、一维数组的初始化

1、全部元素初始化:int arr[5]={10,20,30,40,50};

如果数组的全部元素都初始化 可以省略[]中的数值,元素个数由初始化的元素个数确定。

2、部分元素初始化:int arr[5]={1,2,3};

3、指定下标初始化:int arr[5]={[2]=2, [4]=4};

3、选择排序法

#include<stdio.h>
main()
{
  int arr[10]={0};
  int n = sizeof(arr)/sizeof(arr[0]);
  printf("请输入%d个int数据:", n);
  int i=0;
  for(i=0;i<n;i++)
  {
  scanf("%d", &arr[i]);
  }
   //选择法排序
   int s= 0;
   for(s=0;s<n‐1; s++)
   {
   int min = s;
   int j = min+1;
   for(; j<n; j++)
   {
   if(arr[min] > arr[j])//从小‐‐‐>大
   {
   min = j;//纪录最小值的下标
   }
   }
   //判断假设的最小值下标 和 真实的最小值下标是否 相等 如果不相等 交换
   if(s != min)
   {
   int tmp = arr[s];
   arr[s] = arr[min];
   arr[min] = tmp;
   }
   }
 for(i=0;i<n;i++)
 {
 printf("%d ", arr[i]);
 }
 printf("\n");
 }

 4、二维数组

二维数组总大小==行数*列数*每个元素的空间大小

数组的总大小==sizeof(arr)

行数:sizeof(arr)/sizeof(arr[0]);

列数==sizeof(arr[0])/sizeof(arr[0][0]);

5、二维数值数组的初始化

1、分段初始化

 int arr[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; //完全初始化

 int arr[][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; //如果完全初始化 可以省略行标

 int arr[3][4]={ {1,2}, {5,6}, {9,10} };//部分初始化

2、连续初始化

 int arr[3][4]={ 1,2,3,4, 5,6,7,8, 9,10,11,12}; /完全初始化

 int arr[][4]={1,2,3,4, 5,6,7,8, 9,10,11,12};//如果完全初始化 可以省略行标

 int arr[3][4]={ 1,2, 5,6, 9,10,11}; //部分初始化

6、一维字符数组的初始化

1、逐个元素初始化 char arr[5]={'h','e','l','l','o'};//使用%s输出容易访问非法内存,下标可省。

2、字符串的方式 初始化 一维字符数组 char arr[6]="hello";下标可省。

3、遍历

使用for循环遍历

使用%s直接输出字符串,遇到’\0'才结束。

4、字符串处理函数

头文件:#inclde<string.h>

strlen:测量字符串的长度(不计算‘\0’),只要遇到‘\0’结束长度计算,数据类型为无符号长整型lu

不用strlen求字符串长度:while(str[i]&&++i);

八进制、十六进制、两个反斜杠算一个字符,%单独算一个字符。

5、键盘获取字符数组

1、scanf和%s获取字符串,遇到空格或回车结束输入。

      scanf("%s",str);//数组名作为地址,无需&

2、gets获取带空格的字符串,回车结束输入,但不会获取回车。

      不会判断目的空间是否足够,容易造成越界。

3、fgets可以获取带空格的字符串,安全。遇到回车和达到空间最大值结束获取,会提取回车。

      语法:char *fgets(char *s,int size,FIEL *stream)

s:表示空间的起始位置

size:表示的能获取的最大字节数为size-1

stream:表示设备(stdin标准输入设备(终端))

用例:fgets(str,sizeof(str),stdin);

消除获取到的回车:使用fgets语句后添加str[strlen(str)-1]=0;

6、经典高级字符串题型

1、将str1字符串拷贝到str2中(不使用strcpy)

int i=0;
while(str1[i]!='\0')
{
   str2[i]=str[1];
   i++
}

2、查找元素并输出下标

i=0;
while(str[i]!='\0')
{
  if(str[i]==ch)
     { 
       printf("找到位置为:%d",i);
       break;
     }
i++;
if(str[i]='\0');
  printf("没有找到\n");

3、求将str2字符串插入到字符串str1的pos位置(pos在str1范围内)

//计算str2的长度
 int len = 0;
 while(str2[len] && ++len);

 //将i定位到str1的尾部 i也是str1的长度
 int i=0;
 while(str1[i] && ++i);

 //在str1移动数据 预留足够的位置
 while(i>=pos)
 {
 str1[i+len] = str1[i];
 i‐‐;
 }

 //将str2的字符串 插入到pos位置上
 int j=0;
 while(str2[j] != '\0')
 {
 str1[pos] = str2[j];
 pos++;
 j++;
 }

猜你喜欢

转载自blog.csdn.net/m0_75045191/article/details/131271918