字符数组

###字符数组的定义:有一定顺序关系的若干个字符型变量的集合,就是字符数组。可以是一维的,也可以是多维的。字符数组具有普通数组的性质,又有一些特殊的性质;

###字符数组的初始化:

(1):和普通数组相同,逐个为数组元素赋值:

char   ch[4]={'a','b','c','\0'};

(2):使用字符串常量来赋值:

char   ch[10]={"abcdefghjk"};相当于: char  ch[10]={'a','b','c','d','e','f','g','h','j','k','\0'};

注意:用字符串来初始化字符数组,字符串结尾以“\0”结尾,上面只有10个字母,但字符串隐含了结束标志\0,相当于11个字母,越界了。

例:

#include#includeint main()

{

char ch[10] ={"abcdefghk"};

printf("%lu\n",sizeof(ch));

for (int i=0;i<sizeof(ch)/sizeof(char);i++)

printf("%c\n",ch[i]);

return 0;

}

此时ch[10]中包含了11个字母(多了 "\0"),所以程序会报错,因为越界溢出,所以在 char[]={“ ”}中只能存放9个字母;


###字符串

在C语言中,严格的讲是没有字符串的,不管是原生的还是构造的数据类型,但是为何在程序员的心里是有字符串这个类型的,首先,我们知道C语言是一个面向过程的一门语言,而基于C语言更高级的语言Ojective-C是面向对象的语言,而在高级语言中有字符串这一类型,所以,在C语言中,程序员可以通过字符数组模拟字符串。字符串指的是以'\0'作为结束字符的一组字符,因此把一个字符串存入数组时,也把“\0”存入数组,并以此作为该字符串是否结束的标志;

注意:字符串变量与一般的字符数组有一定的区别;

字符串常见处理函数

1.strlen(s)

头文件:string.h

函数原型:size_t strlen(const char *s)

功能:求字符串的长度(不含字符串结束标志'\0')。

参数:s为字符串

返回值:字符串的长度(不含字符串结束标志'\0')

strlen 函数测试字符串的实际长度(不包括'\0'),并将该长度作为函数的值返回。函数参数“字符串”可以使字符串常量,也可以是字符变量,一般形式:int  length=strlen;

例:

#include <stdio.h>

#include <string.h>

int main()

{

char ch_1[ ]="abc\n";

char ch_2[ ]=" ";

printf("ABC的长度:%d\n",strlen("ABC"));

printf("ch_1的长度:%d\n",strlen(ch_1));

printf("ch_2的长度:%d\n",strlen(ch_2));

return 0;

}

结果:

ABC的长度:3

ch_1的长度:4

ch_2的长度:0

”abc\n“长度为4,而非5,‘\n’被看成一个字符。” “长度为0,是因为他是空字符串没有有效字符,所以长度为0;

2.strcpy(s1,s2)

头文件:string.h

函数原型:char *strcpy(char *dest,const char *sre)

功能:字符串拷贝

参数:src为源串的起始地址,dest为+目标串的起始地址。

返回值:目标串的起始值

strcpy函数用于实现,iangge字符串的拷贝,一般形式:strcpy(字符串1,字符串2)

其中,字符串1必须是字符串变量,而不能是字符串常量。strcpy函数把字符串2的内容完全复制到字符串1中,而不管字符串1中原先存放的是什么,复制后,字符串2保持不变;

例:

#include <stdio.h>

#include <string.h>

int main()

{

char str[10],str2[10];

strcpy(str,"abcdefg");  //将字符串常量拷贝给字符串变量str

strcpy(str2,str); //再将字符串变量str拷贝到字符串变量str2

printf("str:%s\n",str);

printf("str2:%s\n",str2);

return 0;

}

注意:由于字符串是字符数组,所以两个字符串复制不通过赋值运算进行。

3.strcat(s1,s2)

头文件:string.h

函数原型:char *strcat(cgar *dest,const char *src)

功能:把字符串src链接到字符串dest 后面

参数:src为源串的起始地址,dest为目标串的起始地址

返回值:目标串的起始地址

strcat  函数可以将两个字符串链接起来,形成一个新的字符串。strcat函数的调用形式为:strcat(字符数组1,字符数组2);功能是将字符串2接到字符串1的后面

例:

#include <stdio.h>

#include <string.h>

int main()

{

char   s1[50]="Good";

char    s2[]="morning";

strcat(s1,s2);//链接字符串

printf("%s\n",s1);

return 0;

}

结果:Goodmoring

4.strcmp(s1,s2)

头文件:string.h

函数原型:int    strcmp(const   char  *s1,const     char   *s2)

功能:按照ASCII码顺序比较字符串s1和字符串s2的大小

参数:s1为字符串起始地址,dest为目标串的起始地址

返回值:比较结果

字符串1=字符串2,返回值=0;

字符串2>字符串2,返回值>0;

字符串2<字符串2,返回值<0;

字符串比较可使用strcmp函数,strcmp函数的调用形式为:strcmp(字符串1,字符串2);

如果字符串1和字符串2完全相等,函数返回0;如果字符串1大于字符串2,函数返回一个正整数;

如果字符串1小于字符串2,函数返回一个负整数。

字符串比较的规则是:将两个字符串从左至右逐个字符按照ASCII码进行比较,直到出现不相等的字符或遇到‘\0’为止。若果所有字符都相等,则这两个字符串相等。如果出现不相等的字符,以第一个不相等字符的比较结果为准。

例:

#include <stdio.h>

#include <string.h>

int main()

{

  char s1[100],s2[100];

int i;

scanf("%s%s",s1,s2);

i=strcmp(s1,s2);

if(i==0)

{

printf("string1==string2");

}

else if(i>0)

{

printf("string1>string2");

}

else

{

printf("string1>string2");

}

printf("\n");

return 0;

}


5.strstr(s1,s2)

strstr(s1,s2) 函数收索一个字符串在另一个字符串中的第一次出现。如果匹配s2则返回首次出现s2位置的指针,否则则返回null。调用strstr函数的一般形式:strstr(被收索的字符串1,被收索的字符串search);

如果search为数字,则收索与数字匹配的ASCII码值得字符

注意:该函数对大小写敏感。如需进行大小写不敏感的收索,请使用stristr().

例:

#include <stdio.h>

#include <string.h>

int main()

{

char str[]="I like monkey,you like cat!";

char serch[]="like";

char *s=strstr(str,search);

printf("%s\n",s);

return 0;

}

运行结果:Like monkey,you like cat!

6.strchr(s,c)

收索字符串s中首次出现字符c的位置。返回首次出现c的位置的指针,如果s中不存在c则返回null。

调用strchr的一般形式:strchr(被搜索的字符串s,被搜索的字符串c);

strchr和strchr用法一致,只是strstr是查找字符串,strchr是查找单个字符;

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

推荐阅读更多精彩内容