C语言-字符数组

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

1 字符数组的定义

1. 字符数组的定义

字符数组的定义和整型数组的定义是相同的;

// 案例1:
char c[10];
// 字符数组也有二维数组;
// 案例2:
char a[3][4];

字符数组的初始化,字符数组是可以在定义的时候进行初始化的。

// 案例3:
char c[10]={'a','v','s'};
char c1[3]={'a','v','\0'};
char c2[]={"hello"};
char c3[10]="hello";
char c4[]={'a','b','c'};
char *p="hello";

2.字符数组的引用

// 案例4:
#include<stdio.h>
int main()
{
    char a[][5]={
        {'h','e','l','l','o'},
        {'w','o','r','l','d'}
    }
    for(int i=0;i<1;i++)
    {
      for(int j=0;j<5;j++)
      {
        printf("%c",a[i][j]);
      }
      printf("\0");
    }
    return 0;
}

注释:二维数组在初始化时,全部元素赋初值,故一维下标的长度可以不加说明

3. 字符串和字符串的结束标志'\0'

在C语言中字符串是没有专门的变量,因此常用一个字符数组表示字符串。字符串总是以“\0”作为字符串的结束。因此,当把一个字符串存入一个数组的时候,也把结束符“\0”存入数组,并作为此字符串的结束标志。有了“\0”标志后,就不会再用字符数组的长度来判断字符串的长度了。
“\0”在C编译系统自动加上的,由于采用了“\0”标志,所以在用字符串赋初值时,一般无须指定数组的长度,而由系统自行处理。

4. 字符数组的输入输出

// 案例5:
#include<stdio.h>
int main()
{
    char string[10];  //定义字符数组,若不初始化,必须说明其长度
    printf("input string:");
    scanf("%s",string); // 输入字符串
    printf("%s\n",string);  // 字符串的输出
    return 0;
}

注释:
1.“%s”表示,格式字符串;
2.定义一个字符串时,若没有进行初始化,则必须说明其长度;
3.字符数组名string代表字符串的首地址。

2 字符串的处理函数

C语言中提供了一些字符串的处理函数,其中包括:输入、输出、合并、修改、比较、转换、复制和搜索八类。使用用输入输出函数,在使用前应包含头文件“stdio.h”,其他的函数应用头文件“string.h”。

1.字符串的输入输出gets、puts

格式:
gets (字符数组名);
puts (字符数组名);

功能:
1.gets从标准输入设备上输入一串字符串;
2.puts把字符数组中的字符串输出到显示器上,显示该字符串。

// 案例6:输入输入hello world;
#include<stdio.h>
int main()
{
    char ch[15];
    gets(ch);   // 从键盘输入“hello world”
    puts(ch);   // 显示器显示“hello world”
    return 0;
}

注释:从上面可以看出,gets函数并不以空格作为字符串输入结束的标志;而以回车作为结束标志。

2. 求字符串的长度:strlen

格式:
strlen(字符数组);

功能:计算字符串的实际长度,不包括'\0'.

// 案例7:
#include<string.h>
int main()
{
    char ch1="hello world";
    int k=strlen(ch1);
    printf("The length of ch1 is %d\n",k);
    return 0;
}

3. 复制字符串:strcpy

格式:
strcpy (字符数组1,字符数组2);
strncpy(字符数组1,字符数组2,n);

功能:
1.strcpy把字符数组2里面的字符串拷贝到字符数组1中,包括'\0';也就是把字符数组2的字符串给字符数组1。
2.strncpy字符数组1中的前n个字符,由字符数组2代替。

// 案例8:
#include<string.h>
int main()
{
 char ch1[30]="hello world!";
 char ch2[30]="nihao!";
 strcpy(ch1,ch2);
 puts(ch1)
 strncpy(ch1,ch2,5);
 puts(ch1);
 return 0;}

4. 连接字符串:strcat

格式:
strcat(字符数组1,字符数组2)
strncat:(字符数组1,字符数组2,长度n)

功能:
1.strcat把字符数组2中的字符串链接到字符数组1的字符串后面,并删去字符数组1后面的'\0'。本函数的返回值是字符数组1的首地址。
2.strncat:拼接制定长度的字符串

// 案例9:
#include<string.h>
int main()
{
    char ch1[30]="my name is ";
    char ch2[30];
    char ch3[10]="yuan yi";
    printf("input your name:");
    stract(ch1,ch2);
    puts(ch1);
    strnact(ch1,ch3,4);
    puts(ch1);
    return 0;
}

5. 字符串的比较:strcmp

格式:
strcmp(字符数组1,字符数组2);
strncmp(字符数组1,字符数组2,n);

功能:
1.strcmp按照ASCII码顺序比较两组数组中的字符串,并返回比较结果;相等输出0。
2.strncmp比较两组数组的前n个字符,相等输出0。

// 案例10:
#include<string.h>
int main()
{
    int k;
    char ch1[20]="hello world";
    char ch2[20]="hello jack";
    k=strcmp(ch1,ch2);
    if(k==0)
    {
      printf("ch1和ch2是相同的\n");
    }
    else
    {
      printf("ch1和ch2是不相同的\n");
    }
    k=strncmp(ch1,ch2,3);
    if(k==0)
    {
      printf("ch1和ch2是相同的\n");
    }
    else
    {
      printf("ch1和ch2是不相同的\n");
    }
    return 0;
}
···
#3 字符串和指针的关系

char string[10]="hello";
char *p=string;
printf ("string=%s\n",p);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容