二维数组

定义:

数据类型 数组名[第一维长度][第二维长度]

eg:int a[4][5],b[3][3];

二维数组的引用:数组名[下标一][下标二]

存储形式:按行进行存储(第一行每列存储完接下一行)

转置矩阵要注意:交换到主对角线即可,否则会出现两次交换,导致转置失败

字符串

计算机(Computer)是一种能够按照事先存储的程序,自动、高速地进行大量数值计算和 各种信息处理的现代化智能电子设备。 数值:int a,a[10] 信息:字符信息,如字符串

基本概念

字符串的典型应用

  • 信息加密——密钥
  • 词数统计——word文档
  • 字符串匹配——搜索引擎

字符串数组不能被赋值

  • 错误形式

    • char str[10]; str="student" ;
  • 错误原因:数组名str地址常量,不能用于赋值语句中。

//这是字符数组赋初值的方法,[]中省略了,据{}推算为7
char cArr[] ={'Q','U','A','N','X','U','E'};
//这是字符串赋初值的方法,[]中省略了,据{}推算为8,有「\0」
char sArr[] = "quanxue";

若无字符串结束标志/0,则不能以%s正确输出。

引入#include<string.h>后,也不能用strlen()求正确字符串长度。(strlen()求字符串长度不包含/0,而用sizeof()求则包含)

总结:

  • 字符数组即为字符类型的数组。
  • 字符数组不一定是字符串。
  • 字符串是最后一个字符为NULL字符的字符数组。
    • NULL字符:\0
  • 字符串一定是字符数组。
  • 字符数组长度固定,其中任何字符都可为NULL字符。
  • 字符串只能以NULL结尾,其后字符不属于该字符串。
  • strlen()等一些字符串函数对字符串完全适用,对不是字 符串的字符数组不适用。

字符串的输入输出

字符串输出:

  • %c

    • 利用循环逐个字符输出
    • 常用for(i=0;str[i]!='\0';i++)
  • %s

    • 输出「字符数组名」或「字符串常量」
    • printf("%s",str);
  • puts()函数——建议使用
    • puts(字符数组名或字符串常量);
    • 作用:将字符串输出到显示屏上,遇第一个\0终止,并将\0转换成\n输出。
    • char str[]="hello"; puts(str);

字符串输入:

  • scanf()函数一%s

    • 使用%s,其对应项是字符数组名不需要地址运算符&,数组名即为地址常量。 char name[20]; scanf(“%s",name);
    • 不足:
      • 当遇到空格时,scanf()的输入操作将中止。(输入时可用空格分隔需要输入的两个字符串)
      • 无法使用scanf输入一个包含空格的字符串。
  • gets()函数

    • gets(字符数组名)

    • 作用:读入一个字符串(包括空格)到指定数组中,遇到换行符(如回车),用\0代替换行符。

      • 例如: char name[100]; gets(name); puts(name);

        运行示例:

        abcd ef
        abcd ef
        Press any key to continue
        

ASCII码中英文大小写之间相差32。

字符串处理函数—说明在头文件「string.h」中

  • strlen()
  • strcmp()
  • strcpy()
  • strcat()

strlen(数组名);

求字符串长度(字符串中字符的个数),到\0为止,不计\0

strcmp(数组名1,数组名2);

字符串比较函数:对「数组名1」和「数组名2」进行逐个字符的 ASCII 码比较,直到对应 字符能够确定大小关系或到串尾为止。

比较结果 strcmp的值
str1<str2 -1
str1==str2 0
str1>str2 1

strcpy(数组名1,数组名2 or 字符串常量);

字符串拷贝函数:将「字符数组2 or 字符串常量」拷贝到「字符数组1」中,包括\0

例如:

char s1[80],s2[80]; 
gets(s2);
strcpy(s1,s2);
strcpy(s1","Program");

利用该函数可以实现字符串的赋值操作(因赋值符号=左侧应为一个变量)

strcat(数组名1,数组名2 or 字符串常量);

字符串连接函数:将「字符数组1」中的字符串的结束标记字符 取消,然后,将「字符数组2 or 字符串常量」加到它之后。「字符数组2 or 字符串常量」保持不变。

利用该函数可实现两个字符串的拼接。

字符串应用

加密

以凯撒加密为例:

  • Step1:输入任意字符串s
  • Step2:对字符串进行凯撒加密k
  • 重复下述操作,直到字符串中所有的字符都处理完毕

    • Step2.1:如果s[i]<'z'-k或s[i]<'Z'-k,则s[i]=s[i]+k
    • Step2.2:否则,s[i]=s[i]+k-26(有26个英文字母)
  • Step3:输出字符串s

词数统计

  • Step1:输入任意字符串s
  • Step2:新词标志word =0,词数统计num=0
  • Step3:重复下述操作,直到s的所有字符比较结束

    • Step3.1:如果s[i]等于空格,则说明前一个词结束,word=0,输出回车。
    • Step3.2:否则,输出s[i],判断 word 是否为 0,
      • 是,前一字符为空格,新词开始,word=1,num++
  • Step4:输出字符串中的单词数。

字符串匹配

简单引例:给定一个主串 s和一个子串 t,在主串 s中寻找子串 t的过程称为字符串匹配,也称为模式匹配,如果匹配成功,则输出子串t中第一个在主串s中的序号。

  • Step1:初始化主串s子串t的起始下标i=0、j=0;初始化比较的起始位置start=0
  • Step2:重复下述操作,直到s或t的所有字符比较结束
    • i=start;
    • 如果s[i]==t[i],则继续比较st的下一对字符
    • 否则,将start后移 1 位,将ij回溯,准备下一次比较

Step3:如果t中所有字符都比较完毕,则输出start对应的序号;否则,输出匹配失败的提示信息。

© ruchan all right reserved,powered by Gitbook最后修改于: 2020-06-18

results matching ""

    No results matching ""