c语言学习------数组

变量里面只能存一个数据,当需要对多个同类型变量进行处理与管理时,就可以用到数组。

数组:存储 多个 具有同种类型(类型是同一个关键字)的数据。

数组的种类:一维数组,二维数组,三维数组

数组的定义:一维数组:数据类型 数组名[元素总个数]  例如:int data[30] 数组里的数据即为元素

数组下标:数组中为了区分元素,会为每一个元素进行编号,编号从0开始 ,依次增长1向上增长。定义完数组,下标自然产生。注意:使用的时候一定要注意下标不要越界。

数组中元素空间名称:数组名[相应元素下标]

数组+循环对元素空间进行读写操作:

int b[5];

int i;   // 下标
for(i=0;i<=4;i++)
{
scanf("%d",&b[i]);   
}

// 输出

初始化:定义的时候就给值

// 字符数组和字符串

char names[10] = {'a','b','c','d','e','f','g','h','i','j'};  // 字符数组
char names1[5] = {'a','b'};  // {'a','b','\0','\0','\0'}        // 字符数组或者字符串



字符串必须用字符数组来存,但是字符数组的末尾至少要有一个结束符号\0

字符串数组不能用字符型变量接受成为字符串;
字符串初始化的时候可以简写:

char names1[5] = {'a','b'}; // {'a','b','\0','\0','\0'}  
char names[5] = "ab";       // {'a','b','\0','\0','\0'}  

省略数据个数的初始化
int a[] = {4,7,9};  // 后面有几个数据就开几个空间。

char names[] = "lili"; // 5个

---  %s --- 字符串专用的格式控制符
%s 输出输出只要给字符串的首个字符的地址即可。


%s输出的时候给地址,从那个地址开始读取一个知道遇到\0结束

举例:

char b[] = "abcdefghijklmnopqrstuvwsyz";
printf("%s",&b[0]);

char names[30] = {'\0'};  // 定义一个数组并且将数组中的内容清0
scanf("%s",&names[0]);
printf("%s",&names[0]);

数组的注意事项
1、数组只能在初始化的时候整体赋值。
2、数组名是数组首元素的地址

二维数组

数组里面存储的元素是同种类型的。二维数组存储多个同种类型的一维数组(要求两个一维数组的类型跟个数都相同)

二维数组定义格式:数据类型 数组名[行数][列数];

对二维数组进行读写时最好使用for循环更为方便快捷。

字符串处理函数

字符数组存字符串
%s

因为对字符数组进行操作的函数基本都是库函数,所以需要引用头文件,即#include<string.h>

string.h库函数中常用的字符串处理函数(可以在库函数相关文档中找到相应函数用法。)

strlen  --- 求字符串长度不包含\0,遇到\0结束
strcat  --- 拼接   “hello”  "world"  "hello world"
strcmp  --- 比较   
strcpy  --- 拷贝   char names[30]; 定义后整体赋值用strcpy
strstr  --- 在一个字符串里面定位另外一个字符串。
strchr  --- 在一个字符串里面定位一个字符

memset  --- 整体设置内存
memcpy  --- 从一个字符串拷贝n个字符到另外一个字符串里面

strlen  --- 求字符串长度不包含\0,遇到\0结束

char s[] = "hello world xxxx";
int len = strlen(&s[0]);  // 可简化为int len = strlen(s); 数组名是数组首元素的地址  
printf("%d",len);

strcat  --- 拼接   “hello”  "world"  "hello world"

char *strcat( char *str1, const char *str2 );
函数将字符串str2 连接到str1的末端,并返回指针str1. 

char str1[100] = "hello";  
char str2[20] = "world";

char *res = strcat(str1,str2);
printf("%s",res);
printf("%s",str1);

strcmp  --- 比较 

int strcmp( const char *str1, const char *str2 );

比较字符串str1 and str2, (比较的是两个字符串中的ASCII码值)
第一个 < 第二个   返回 -1
第一个 == 第二个  返回 0
第一个 > 第二个   返回 1

举例:

第一个        第二个
"hello"       "hihi"    'e' < 'i'  第一个 < 第二个  return  -1;
"hello"       "hello"   输出0
"hello world" "hello"   --- 空格 > '\0'  输出1 

strcpy  --- 拷贝   char names[30]; 定义后整体赋值用strcpy

char *strcpy( char *to, const char *from );
复制字符串from 中的字符到字符串to,包括空值结束符。返回值为指针to。

char names[30];

strcpy(names,"xiaoming");

printf("%s",names);

strstr  --- 在一个字符串里面定位另外一个字符串。

"temp:36.50,humid:200"

char *strstr( const char *str1, const char *str2 );
函数返回一个指针,它指向字符串str2 首次出现于字符串str1中的位置,如果没有找到,返回NULL。

char *res = strstr("temp:36.50,humid:200","temp1:");
if(res == NULL)
{
printf("no");
}
else
{
printf("yes");
}

未找到相应字符串会在编译时出现警告。

strchr  --- 在一个字符串里面定位一个字符

char *strchr( const char *str, int ch );
函数返回一个指向str 中ch 首次出现的位置,当没有在str 中找到ch返回NULL。

char *res = strchr("hello",'l');

if(res == NULL)
{
printf("no");
}
else
{
printf("%s",res);  // llo
}

memset  --- 整体设置内存
将一段内存空间填入某值
void *memset( void *buffer, int ch, size_t count );

函数拷贝ch 到buffer 从头开始的count 个字符里, 并返回buffer指针。 memset() 可以应用在将一段内存初始化为某个值。

例如:memset( the_array, '\0', sizeof(the_array) );

// sizeof -- 求空间字节数 可以放数据类型也可以放空间的名称
// printf("%d",sizeof(int));  // 4
// int a;
// printf("%d",sizeof(a));  // 4

// int a[5];
// printf("%d",sizeof(a));  // 在sizeof里面数组名代表空间名称 -- 计算整个空间有多少字节 --- 20

char names[15] = "hello world";
memset(names,'t',6);

printf("%s",names);

memcpy  --- 拷贝内存内容 
从一个字符串拷贝n个字符到另外一个字符串里面
 void *memcpy( void *to, const void *from, size_t count );
 函数从from中复制count 个字符到to中,并返回to指针。 如果to 和 from 重叠,则函数行为不确定。

char str1[40] = "xxxxtemp:36.50,humid:200";
char t[8] = {'\0'};

// 定位temp:    strstr
// 跨越 temp:   + 5
// 拷贝 5个字符目标数组里面去  memcpy

char *res = strstr(str1,"temp:");
if(res == NULL)
{
printf("找不到");
}
else
{
res = res + 5;  // char *指针偏移5个char
memcpy(t,res,5);
printf("%s",t);
}

特别注意:

char *str1        可以通过str1对它指向的字符串进行读写操作
const char *str1  可以通过str1对它指向的字符串进行读操作,不能写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值