数据的组织形式
//字符数组
最终在计算机中 是按照字符数组的形式(数组的特点)储存;字符串最终一定时一'\0'作为结束标志。
char s[10]={ };
char s[10]="hello";
cgar *strcat (char *dest,const char *src);
功能:对字符的拼接
参数:
@dest 目标字符串
@src 源字符串
返回值:
成功返回的是dest 失败的话UNLL
字符串比较的规则与其他语言中的规则相同,即:
对两个字符串自左至右逐个字符相比(按ASCII 码值大小比较),直到出现不同的字符或遇到'\0' 为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。
#include
int main(void)
{
int i=0;
char s1[20];
char s2[20];
// gets(s1);
// gets(s2);
scanf ("%s %s",s1,s2);
while (s1[i]!=0 || s2[i]!=0)
{
if(s1[i]==s2[i])
{
++i;
printf("%s=%s\n",s1,s2);
break;
}else if(s1[i]>s2[i])
{
printf("%s>%s\n",s1,s2);
break;
}else
{
printf("%s>%s\n",s2,s1);
break;
}
}
return 0;
}
比较两个字符串的大小也可以用到一个函数:
int strcmp( )
功能:比较两个字符串的大小
其作用是将一个字符串(以'\0'结束的字符序列)输出到终端。假如已定义str是一个字符数组名,且该数组已被初始化为"China"。则执行:puts(str)其结果是在终端上输出“China”。由于可以用printf函数输出字符串,因此 puts函数用的不多。
用puts函数输出的字符串中可以包含转义字符。例如:
char str[]={"China\n Bei jing"};
puts(str);
输出:China
Bei jing
在输出时将字符串结束标志'\0'转换成'\n',即输出完字符串后换行。
其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。如执行下面的函数:
gets(str)
从键盘输入:Computer
将输人的字符串"Computer"送给字符数组str(请注意,送给数组的共有9个字符,而不是8个字符),函数值为字符数组str的起始地址。一般利用gets函数的目的是向字符数组输入一个字符串,而不大关心其函数值。
注意:用puts 和gets函数只能输出或输入一个字符串,不能写成
puts(str1,str2) 或 gets(str1,str2)
strcat是 STRing CATenate(字符串连接)的缩写。其作用是连接两个字符数组中的字符串,把字符串⒉接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。例如:
char str1[30]={"People's Republic of " };
char str2[ ]一 {"China" };
printf ("%s",strcat(str1,str2));
输出:
People's Republic of China
说明:1.只要字符数组1的空间足够大,就能便于容纳更多新的字符串
2.两个字符串都有'\0',连接时将字符串1后面的'\0'取消掉,在连接之后的新的字符串的后面加上'\0'。
即(目标字符数组,源字符数组)
它是”字符串复制函数“,就是将字符串2复制到字符数组1中去,例如:
说明:1.只要字符数组1的空间足够大,就能便于容纳更多新的字符串。同时字符数组1的长度不应小于字符串2的长度。
2.”字符数组1“也必须写成数组名形式;”字符串2“可以是数组名,也可以是一个字符串常量。比如:strcpy(str1 ,"China") ;
3.如果在复制前未对strl数组赋值,则str1各字节中的内容是无法预知的,复制时将str2中的字符串和其后的'\0'一起复制到字符数组1中,取代字符数组1中的前面6个字符,最后4个字符并不一定是斜杠零,而是strl中原有的最后4个字节的内容。
4.不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如下面两行都是不合法的:例如:
str1="China";和strl=str2;
而只能用strcpy函数将一个字符串复制到另一个字符数组中去。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。
5.可以用strncpy函数将字符串2中前面n个字符复制到字符数组1中去。例如
strncpy(strl,str2,2);
作用是将str2中最前面⒉个字符复制到str1中,取代strl中原有的最前面2个字符。但复制的字符个数n不应多于str1中原有的字符(不包括'\0')。
作用是比较字符串1和字符串2。
说明:字符串比较的规则与其他语言中的规则相同,即对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到′1o'为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。
比较的结果由函数值带回。
(1)如果字符串1一字符串2,则函数值为0。
(2)如果字符串1>字符串2,则函数值为一个正整数。
(3)如果字符串1<字符串2,则函数值为一个负整数。
它是测试字符串长度的函数。函数的值为字符串中的实际长度(不包括'\0'在内)。
注意:在linux下没有这两个函数
strlwr是将字符串中的大写字母换成小写字母
strupr是将字符串的小写字母换成大写字母
类型说明符 数组名 【常量表达式1】【常量表达式是2】
1.在c语言中不存在真正的二维数组,都是一维数组
2.二维数组其实就是一维数组中的一维数组
二维数组中: 行 列
int a[3][4];对应的就是三行四列 其中a是数据类型
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; //这种形式就是全部初始化
int a[3][4]={1,2,3,4,5,6,7}; //这种形式就是部分初始化
int a[3][4]={{1,2,3,4},{5,6,7,8}}; //这种格式是按行初始化
定义一个二维数组 int a[3][4];初始化一下 求出能被3整除的数
#include
int main(void)
{
int i=0;
int j=0;
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
for(j=0;j<3;++j)
{
for(i=0;i<4;++i)
{
if (a[j][i]%3==0)
{
printf("a[%d][%i]=%d\n",j,i,a[j][i]);
}
}
}
return 0;
}
注意:int a[3][4]; //二维数组语法角度 -----行数可以省略 列数不能省略
//列数省略的时候,必须给值
char s[3][4];
输入三个字符串 找出最大字符串
strcmp(s[0],s[1])
strcpy(s[0],s[1])
#include
#include
int main(void)
{
int n = 0;
printf("Input a num:");
scanf("%d",&n);
char s[n][10];
getchar();
int i = 0;
for (i = 0; i < n; ++i)
{
gets(s[i]);
}
char max[10];
strcpy(max,s[0]);
for (i = 1; i < n; ++i)
{
if (strcmp(s[i], max) > 0)
{
strcpy(max,s[i]);
}
}
printf("max = %s\n",max);
return 0;
}
输入3个字符串 排序
#include
#include
int main(void)
{
int n = 0;
printf("Input a num:");
scanf("%d",&n);
char s[n][10];
getchar();
int i = 0;
for (i = 0; i < n; ++i)
{
gets(s[i]);
}
int j = 0;
for (i = 0; i < n; ++i)
{
char t[10];
strcpy(t,s[i]);
j = i;
while(j > 0 && strcmp(s[j-1],t) > 0)
{
strcpy(s[j],s[j-1]);
--j;
}
strcpy(s[j],t);
}
for (i = 0; i< n; ++i)
{
printf("%s\n",s[i]);
}
return 0;
}
a.二维数组本质
b.二维整型数组操作 ---访问具体的元素 a[i][j]
c.二维字符型数组
放多个字符串
char s[3][10];
函数------实现某一个功能
类型标志符 函数名(形式参数)
{
声明部分
语句部分
}
拆------拆功能 拆需求 同时函数的目的就是实现某一种功能
返回值的类型标识符 函数名 (形式参数) //函数头 --规定了一下函数的形式
{
函数体 //--实现函数具体功能代码
返回结果 //return 返回结果
}
准备数据:
准备两个数据 --- 形式参数要能接收两个数据 ---本身其实就是变量
处理数据:
a+b
返回结果:
return
一个函数先取一个函数名 函数名: add
形式参数: int a,b; //形参不能这样写
应该是:数据类型 形参变量名1,数据类型 形参变量名2,..如: int a,int b
函数功能:a+b
结果:
return 结果;
函数调用:
语法:
函数名(实际参数);