C语言数组相关内容

一维数组

数组就是具有一定顺序关系的若干变量的集合。其中的每个变量都被称为数组的元素,且数据类型必须相同。

dataType arry_name][len];

数组中每个元素的数据类型必须一致

数组长度 length 最好是整数或者常量表达式

访问数组元素时,下标的取值范围为 0 ≤ index < leng,过大或过小都会越界,导致数组溢出

arry_name[index]

数组是一个整体,它的内存是连续的;也就是说,数组元素之间是相互挨着的,彼此之间没有一点点缝隙

数组的初始化

1 ) 可以只给部分元素赋值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。

2 ) 只能给元素逐个赋值,不能给数组整体赋值。

3 ) 如给全部元素赋值,那么在定义数组时可以不给出数组长度。

二维数组

dataType arry_name[len1][len2];

二维数组的各个元素是相互挨着的,彼此之间没有缝隙

int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };
int a[5][3]={80, 75, 92, 61, 65, 71, 59, 63, 70, 85, 87, 90, 76, 77, 85};
//两种赋值方式等价

注意

1 )可以只对部分元素赋值,未赋值的元素自动取“零”值。

2 )如果对全部元素赋值,那么第一维的长度可以不给出

3 )二维数组可以看作是由一维数组嵌套而成的;如果一个数组的每个元素又是一个数组,那么它就是二维数组。前提是各个元素的类型必须相同

字符数组和字符串详解

用来存放字符的数组称为字符数组

char a[10];  //一维字符数组
char b[5][10];  //二维字符数组
char c[20]={'c', '  ', 'p', 'r', 'o', 'g', 'r', 'a','m'};  // 给部分数组元素赋值
char d[]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm' };  //对全体元素赋值时可以省去长度
char str[30] = {"cyuyan"};
char str[30] = "cyuyan";  //这种形式更加简洁,实际开发中常用
char str[] = {"cyuyan"};
char str[] = "cyuyan";  //这种形式更加简洁,实际开发中常用
char str[7];//字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符一个字符地赋值
str = "abc123";  //错误
//正确
str[0] = 'a'; str[1] = 'b'; str[2] = 'c';
str[3] = '1'; str[4] = '2'; str[5] = '3';

字符串结束标志

找到字符串的开头很容易,知道它的名字(字符数组名或者字符串名)就可以。字符串总是以'\0'作为结尾,所以'\0'也被称为字符串结束标志,或者字符串结束符。由" "包围的字符串会自动在末尾添加'\0'

字符串长度

即字符串包含了多少个字符(不包括最后的结束符'\0')

#include <string.h>
len = strlen(str_name)

字符串的输出

puts():输出字符串并自动换行,该函数只能输出字符串。

printf(): 通过格式控制符%s输出字符串,不能自动换行。除了字符串,printf() 还能输出其他类型的数据。


#include <stdio.h>
int main(){
    char str[] = "abc";
    printf("%s\n", str);  //通过字符串名字输出
    printf("%s\n", "abc");  //直接输出
    puts(str);  //通过字符串名字输出
    puts("abc");  //直接输出
    return 0;
}

执行结果:

abc

abc

abc

字符串的输入

scanf();//通过格式控制符%s输入字符串。除了字符串,scanf() 还能输入其他类型的数据。
gets();//直接输入字符串,并且只能输入字符串。

scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。

gets() 认为空格也是字符串的一部分,只有遇到回车键时才认为字符串输入结束,即不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。换句话说,gets() 用来读取一整行字符串。

scanf()控制字符串

scanf() 控制字符串的完整写法为:

%{*} {width} type

其中,{ } 表示可有可无。各个部分的具体含义是:

type表示读取什么类型的数据,例如 %d、%s、%[a-z]、%[^\n] 等;type 必须有。

width表示最大读取宽度,可有可无。

*表示丢弃读取到的数据,可有可无。

字符串处理函数

string.h是一个专门用来处理字符串的头文件,它包含了很多字符串处理函数。下面三个是比较常用的。

字符串连接函数strcat()

strcat 是 string catenate 的缩写,即把两个字符串拼接在一起,格式为:

	strcat(str1,str2);

str1,str2是需要拼接的字符串。strcat()将把str2连接到str1后面,并删除原来str1最后的结束标志'\0'。即str1必须足够长以同时容纳str1和str2,否则会越界。

strcat()返回值为str1的地址。

#include <stdio.h>
#include <string.h>
int main()
{
	char str1[]="Today is";
	char str2[100]={0};
	printf("input a weekday: ");
	gets(str2);
	strcat(str1,str2);
	puts(str1);
	
	return 0;
}

执行结果:

input a weekday: Friday↙

Today is Friday

字符串复制函数strcpy()

strcpy 是 string copy 的缩写,意思是字符串复制,即将字符串从一个地方复制到另外一个地方,格式为:

strcpy(str1,str2);

strcpy() 会把str2中的字符串拷贝到str1中,字符串结束标志'\0'也一同拷贝。所以str1的长度必须足够长以至能容纳str2的内容。

#include <stdio.h>
#include <string.h>
int main(){
    char str1[50] = "abcde";
    char str2[50] = "everyday is a new nice day";
    strcpy(str1, str2);
    printf("str1: %s\n", str1);
    return 0;
}

执行结果:

str1: everyday is a new nice day

字符串比较函数strcmp()

strcmp 是 string compare 的缩写,意思是字符串比较。

strcmp(str1);

字符本身没有大小之分,strcmp() 以各个字符对应的 ASCII 码值进行比较。strcmp() 从两个字符串的第 0 个字符开始比较,如果它们相等,就继续比较下一个字符,直到遇见不同的字符,或者到字符串的末尾。返回值:若str1和str2相同则返回0;若str1大于str2则返回大于0的值;若str1小于str2则返回小于0的值。

#include <stdio.h>
#include <string.h>
int main(){
    char a[] = "aBcDeF";
    char b[] = "AbCdEf";
    char c[] = "aacdef";
    char d[] = "aBcDeF";
    printf("a VS b: %d\n", strcmp(a, b));
    printf("a VS c: %d\n", strcmp(a, c));
    printf("a VS d: %d\n", strcmp(a, d));
   
    return 0;
}

执行结果:

a VS b: 32

a VS c: -31

a VS d: 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随与博主沟通,博主解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随与博主沟通,博主解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随与博主沟通,博主解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随与博主沟通,博主解答。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值