专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

C语言字符串的定义及使用

  前言
  字符串的存储方式有字符数组和字符指针。
  因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别对这些字符进行存储,即通过字符数组存储。字符数组是一个数组,且是存储字符的数组,该数组中一个元素存放字符串的一个字符。一、字符数组的定义
  1、因为字符数组首先是一个数组,所以前面讲的数组内容通通都适用。其次它是存放字符的数组,即数组的类型是char型。比如:charname〔10〕;表示定义了10字节的连续内存空间。如果字符串的长度大于10,那么就存在语法错误。这里需要注意的是,这里指的字符串的长度包括最后的。也就是说,虽然系统会自动在字符串的结尾加,但它不会自动为开辟内存空间。所以在定义数组长度的时候一定要考虑。如果字符串的长度小于数组的长度,则只将字符串中的字符赋给数组中前面的元素,剩下的内存空间系统会自动用填充。
  2、我们在用C语言编写程序时,经常会遇到使用字符串数组的情况,这种数组的特点是,数组中的每个元素都是一个字符串,但每个字符串的长度却不相同。如果你使用C语言进行编程的话,实现起来相对比较简单,只需直接选择标准模板库的字符串string类,在代码中定义该类的一个数组即可实现。现在的问题是,在纯C语言中如何定义这样的一个字符串数组呢?
  如对于下面的一个字符串数组:str{IloveC。,IloveC。,IloveJAVA。,IlovePython。,IloveLabVIEW。}
  下面给出C语言中的两种定义方法。
  方法1:定义一个char类型的二维数组这种方法是通过定义一个char类型的二维数组实现,通过二维数组的行索引可得到数组中的每个字符串,列的大小限定了每个字符串所能包含的最大字符个数,所以采用这种定义方式时,列的大小必须不能小于数组所有字符串的最大长度。如对于上面的数组,C语言的定义代码如下:charstr〔5〕〔20〕{IloveC。,IloveC。,IloveJAVA。,IlovePython。,IloveLabVIEW。}在取该数组的每个字符串时,直接对行索引即可。
  方法2:定义一个指向char类型的指针数组这种方法是通过定义一个指向char类型的指针数组实现,数组中的每个元素都是一个指针,通过该指针可得到数组中的每个字符串。如对于上面的数组,C语言的定义代码如下:charstr〔5〕{IloveC。,IloveC。,IloveJAVA。,IlovePython。,IloveLabVIEW。}
  两种方法对比上面的两种方法都可以实现我们的目的,但在内存的占用上两种方法不同。第1种方法定义了一个5行20列的二维数组,即每个字符串所占的字节长度都为20个,所以共需要占用100个字节。第2种方法是定义的指针数组,每个指针指向的字符串占用的字节长度是其实际长度,所以其总的长度肯定小于100个字节。综合来讲,第1种方法相对于第2种方法,造成了存储空间的浪费情况。二、字符数组的初始化
  字符数组的初始化与数组的初始化一样,要么定义时初始化,要么定义后初始化。下面写一个程序来说明这个问题:
  代码如下(示例):includestdio。hintmain(){chara〔10〕;a〔0〕i;a〔1〕;a〔2〕l;a〔3〕o;a〔4〕v;空格字符的单引号内一定要敲空格a〔5〕e;a〔6〕;a〔7〕y;a〔8〕o;a〔9〕u;a〔10〕;charb〔10〕;b〔0〕i;b〔1〕;b〔2〕m;b〔3〕i;b〔4〕s;b〔5〕s;b〔6〕;b〔7〕y;b〔8〕o;b〔9〕u;charc〔〕ibelieveyou;chard〔〕{i,,l,i,k,e,,y,o,u,};chare〔〕{H,e,l,l,o,,W,o,r,l,d};charf〔〕不是我抄你的,就是你抄我的!;charg〔10〕;printf(as,a);输出字符串用s,输出参数必须写数组名printf(bs,b);printf(cs,c);printf(ds,d);printf(es,e);printf(fs,f);printf(gs,g);return0;输出结果是:ailoveyoubimissyou琉iloveyoucibelieveyoudilikeyoueHelloWorld繇likeyouf不是我抄你的,就是你抄我的!g}
  1。先定义后初始化chara〔10〕;a〔0〕i;a〔1〕;a〔2〕l;a〔3〕o;a〔4〕v;空格字符的单引号内一定要敲空格a〔5〕e;a〔6〕;a〔7〕y;a〔8〕o;a〔9〕u;a〔10〕;
  数组a是先定义后初始化。一方面与以前讲的数值型数组一样,先定义后初始化必须一个一个地进行赋值,不能整体赋值;另一方面与以前讲的数值型数组又不一样,对于字符串,先定义后初始化也可以整体赋值,但是要调用strcpy函数,这点稍后再讲。
  总之上面这个程序中给数组a一个一个进行初始化的方式很麻烦。而且这样写需要注意:前面讲过系统会在字符串的最后自动添加结束标志符,但是当一个一个赋值时,系统不会自动添加,必须手动添加。如果忘记添加,虽然语法上没有错误,但是程序将无法达到我们想要的功能。数组b就是这样的例子。
  此外,空格字符必须要在单引号内敲一个空格,不能什么都不敲,什么都不敲就是语法错误。也不能多敲,因为一个单引号内只能放一个字符,敲多个空格就是多个字符了。charb〔10〕;b〔0〕i;b〔1〕;b〔2〕m;b〔3〕i;b〔4〕s;b〔5〕s;b〔6〕;b〔7〕y;b〔8〕o;b〔9〕u;
  数组b就是最后没有手动添加的例子。程序是希望数组b输出imissyou,但输出结果是imissyou錌iloveyou。原因就是系统没有在最后添加。
  虽然程序中对数组b的长度进行了限制,即长度为10,但是由于内存单元是连续的,对于字符串,系统只要没有遇到,就会认为该字符串还没有结束,就会一直往后找,直到遇到为止。被找过的内存单元都会输出,从而超出定义的10字节。
  2。定义时初始化charc〔〕ibelieveyou;
  数组c是定义时初始化。定义时初始化可以整体赋值。整体赋值有一个明显的优点方便。定义时初始化可以不用指定数组的长度,而先定义后初始化则必须要指定数组的长度,如数组a和数组b。不用指定数组长度有一个好处:不用人为确定需要多少字节的内存空间,系统会根据初始化的内容自动分配数量正好的内存空间。而且对于数组c的写法系统会自动在最后添加结束标志符,不需要人为添加。chard〔〕{i,,l,i,k,e,,y,o,u,};
  数组d也是定义时初始化,但它既属于整体赋值,也属于一个一个赋值。说它是整体赋值是因为不用写d〔0〕、d〔1〕而说它是一个一个赋值是因为它把整个句子分成了一个一个的字符。还是数组c的写法比较方便,而且对于数组d的写法系统也不会自动在最后添加结束标志符,必须人为添加。如果忘记添加就会出现与数组b同样的错误。从数组e的输出结果可以看出这一点。charf〔〕不是我抄你的,就是你抄我的!;
  数组f是存储汉字,汉字不能像数组a或数组d那样分开一个一个赋值。因为一个汉字占2字节,若分开赋值,由于一个单引号内只能放一个字符,即一字节,所以将占2字节的汉字放进去当然就出错了。因此如果用字符数组存储汉字的话必须整体赋值,即要么定义时初始化,要么调用strcpy函数。charg〔10〕;
  数组g初始化为一对双引号,表示该字符数组中10个元素的内容都为。下面写一个程序验证一下:includestdio。hintmain(){charstr〔3〕;str〔2〕a;printf(strs,str);return0;}输出结果是:
  str
  程序中定义了一个长度为3的字符数组,然后给第三个元素赋值为a,然后将整个字符数组输出。但是输出结果什么都没有,原因就是其直接初始化为一对双引号,此时字符数组中所有元素都是。所以虽然第三个元素为a,但因为第一个元素为,而是字符串的结束标志符,所以无法输出。
  需要注意的是,使用此种初始化方式时一定要指定数组的长度,否则默认数组长度为1。
  总结,字符数组与前面讲的数值数组有一个很大的区别,即字符数组可以通过s一次性全部输出,而数值数组只能逐个输出每个元素。三、怎样引用字符数组中的元素
  1。输出一个已知的字符串includestdio。hintmain(){charc〔〕{I,,C,o,m,e,,F,r,o,m,,N,Y,I,S,T,};法一for(inti0;i17;i){printf(c,c〔i〕);}printf();法二printf(s,c);return0;}
  2。输出一个菱形includestdio。hintmain(){chardiamond〔〕〔5〕{{,,},{,,,},{,,,,},{,,,},{,,}};inti,j;for(inti0;i5;i){for(intj0;j5;j){printf(c,diamond〔i〕〔j〕);}printf();}return0;}
  3。连续字符力扣题目给你一个字符串s,字符串的能量定义为:只包含一种字符的最长非空子字符串的长度。
  请你返回字符串的能量。
  示例1:
  输入:sleetcode
  输出:2
  解释:子字符串ee长度为2,只包含字符e。
  示例2:
  输入:sabbcccddddeeeeedcba
  输出:5
  解释:子字符串eeeee长度为5,只包含字符e。
  示例3:
  输入:striplepillooooow
  输出:5
  示例4:
  输入:shooraaaaaaaaaaay
  输出:11
  示例5:
  输入:stourist
  输出:1includestdio。hincludestring。hintmaxPower(chars){inti;intstart;intmaxlen1;inttemplen1;start0;for(i1;istrlen(s);i){if(s〔i〕s〔start〕){templen;}else{starti;if(templenmaxlen){maxlentemplen;}templen1;}}最后一句很关键,把最后start直到末尾算出的templen和maxlen比较一下例如eettt,计算出的maxlen为2,但最后start直到末尾算出的templen为3returnmaxlentemplen?maxlen:templen;}intmain(){charstr〔〕aaaabbbeeeeeee;intlenmaxPower(str);printf(d,len);return0;}
  4。截断句子力扣题目在字符串s中找出第一个只出现一次的字符。如果没有,返回一个单空格。s只包含小写字母。
  句子是一个单词列表,列表中的单词之间用单个空格隔开,且不存在前导或尾随空格。每个单词仅由大小写英文字母组成(不含标点符号)。
  例如,HelloWorld、HELLO和helloworldhelloworld都是句子。
  给你一个句子s和一个整数k,请你将s截断,使截断后的句子仅含前k个单词。返回截断s后得到的句子。
  示例1:
  输入:sHellohowareyouContestant,k4
  输出:Hellohowareyou
  解释:
  s中的单词为〔Hello,howare,you,Contestant〕
  前4个单词为〔Hello,how,are,you〕
  因此,应当返回Hellohowareyou
  示例2:
  输入:sWhatisthesolutiontothisproblem,k4
  输出:Whatisthesolution
  解释:
  s中的单词为〔What,isthe,solution,to,this,problem〕
  前4个单词为〔What,is,the,solution〕
  因此,应当返回Whatisthesolution
  示例3:
  输入:schopperisnotatanuki,k5
  输出:chopperisnotatanukiincludestdio。hincludestring。hchartruncateSentence(chars,intk){intlenstrlen(s);intcnt0;inti;for(i0;ilen;i){if(s〔i〕(cntk)){空格够了,就添加结束符s〔i〕;break;}}returns;}intmain(){charstr〔〕aaaabbbeeeeeee;charlentruncateSentence(str,3);printf(s,len);return0;}完结撒花

广州有个造型奇葩的地标建筑,像个大金币,好多游客觉得太土这里是刘小顺的旅行和生活研究所。广州,作为我国四大一线城市之一,有着悠久深厚的历史人文底蕴,也有着相当丰富的旅游资源,还是一座著名的旅游城市。说到广州著名的地标建筑,很多去过广州旅山东省2023年将完成建筑业总产值1。9万亿元以上工人日报中工网记者田国垒通讯员陈国欣1月31日,记者从山东省住房和城乡建设工作会上了解到,2023年,山东省全年将实现建筑业总产值突破1。9万亿元,其中省外产值达到4500亿元。山曹操高陵发现宋元时期建筑基址记者从河南省文物考古研究院获悉,国家社科基金项目曹操高陵及陵园综合研究发表新的研究成果,曹操高陵西侧发现宋元时期建筑基址,可能是北宋时期为曹操高陵设置的守陵户所在。勘探发现的南北向为什么时间只会向前流逝?这个看似简单的问题并不像看起来那么容易回答,至今也没有一个确定的答案。但我们可以试着理解为什么会这样。从物理学的角度来看,从牛顿力学,到爱因斯坦的相对论,再到量子力学,时间流逝的方Moss离我们有多远?来自社科角度的分析人工智能的利与弊电影流浪地球2春节档上映的科幻电影流浪地球二再次引爆了大家的科幻热情,影片中除了太空电梯门框机器人和各种高科技设备外,最令人津津乐道的就是贯穿全线的数字生命大BOS聚焦高质量发展,9个省重点项目赋能滨海湾加速跑近日,广东省发改委发布了2023年重点建设项目计划通知。东莞共有102个省重点项目,总投资4158亿元,2023年计划投资473。4亿元。在这102个项目中,有9个项目与滨海湾的发总投资1382亿元!南沙一季度签约项目30个开局就是决战,起步就是冲刺。1月29日,距离广州市高质量发展大会举办不到24小时,广州又马不停蹄举行争先机开好局2023年一季度重大项目开工签约活动。当日举行的签约动工活动以黄埔区藏格矿业氯化钾碳酸锂量价齐升公司业绩同比增超2。9倍藏格矿业1月29日晚间发布业绩预告,预计2022年归属于上市公司股东的净利润56。3亿元57。8亿元,同比增长294。44304。95基本每股收益约3。49元约3。59元。对于业绩俄罗斯白俄罗斯运动员参加亚运会,中国优势项目悬了?网友表示不怕来抢金牌近日,俄罗斯白俄罗斯运动员将参加今年杭州亚运会的新闻引发热议。有消息称,可能为受邀参加亚洲赛事的俄罗斯和白俄罗斯运动员制定特别的奥运资格选拔系统,以避免占用亚洲选手的名额和奖牌。2许家印给家乡捐款家乡人立流芳百世碑,恒大欠债后立马抹掉恒大的深陷债务危机,而且现在看来基本上无解,恒大的债务达到了惊人的2万亿元,可以说恒大基本上靠自己是走不出债务危机了。恒大的破产清算也是早晚的事情,虽然很多人不愿意承认,但这是事实IDC2022年vivo位居国内智能手机出货量第一IDC2022年vivo位居国内智能手机出货量第一科创板日报29日讯,国际数据公司(IDC)最新报告显示,2022年第四季度,苹果出货量排名国内市场首位,市场份额20。6vivo位
2022。10。07早安心语,正能量暖阳语录句子早上好精美心语图片早上好,今天是2022年10月07日,星期五,农历九月十二,壬寅年虎年己酉月癸巳日。不是井里没有水,而是挖的不够深不是成功来的慢,而是放弃速度快,得到一件东西需要勇气,放弃一样东西C罗空门居然打中门柱,梅西不会吧?果然摩纳哥31大胜特拉布宗果然啊,八次果然了,摩纳哥大胜并且比分刚刚好31啊!10月7日0045,欧联小组赛H组第3轮上半场,马克西戈麦斯开场仅10分钟便被直红罚下,紧接着恩博洛助攻本耶德尔抢射破门尾声阶段99114!詹姆斯威少休战,湖人背靠背15分输球,季前赛遭遇三连败北京时间10月7日,NBA季前赛比赛继续进行,洛杉矶湖人队背靠背出战,迎来了明尼苏达森林狼队的挑战。本场比赛詹姆斯威少和戴维斯三人均未出场,湖人队在首节比赛一度领先对手,森林狼从第上海1分险胜山西!李添荣165挑大梁王哲林136丁彦雨航成打铁王9998,上海队在和山西队的季前赛首次交战当中以一分险胜对手,从而拿到了新赛季的开门红。本场比赛上海队一开始就占据着场上的主动,但是优势却并不明显。上半场上海队仅仅领先五分,而到了美国人是如何失去他们的月球计划的?媒体定期谈论所谓的月球阴谋一种阴谋论,声称作为阿波罗太空计划的一部分在月球上飞行和着陆是捏造的。今天,考虑一个相当著名的主张,即NASA失去了土星5号月球火箭。人们常说土星5号火箭那么多人都有深海恐惧症,深海里到底有什么?海洋一直很神秘,据说,人类对于火星的了解,都多于海洋。迄今为止,有95的海域,仍然处于未知状态,至于海洋深处,更是让人望而却步。今天我们就来聊聊,深海中都有些什么?电影桥段总是容易穿过银河系的手臂可能有助于形成地球的坚实地面我们星球穿越银河系的旅程与很久以前地壳形成的节奏同步每2亿年,太阳系就会穿过银河系的一个旋臂(如图)。这些相遇可能在形成地球的第一个大陆地壳中发挥了作用。地球穿越银河系的旅程可能有再遇波折,美国航天到底怎么了?美国的重返月球计划又遇到重大挫折了。9月21日,美国国家航空航天局(NASA)表示,他们再次检测到新一代登月火箭太空发射系统(SLS)发生液氢泄漏,被迫推迟发射。自美国宣布要重返月俄宇航员20年来首乘美飞船已抵达国际空间站中新网10月7日电综合报道,美国东部时间6日下午,一艘美国太空探索技术公司(SpaceX)的载人龙飞船在经历了29小时太空飞行后,成功与国际空间站对接,将包括俄罗斯宇航员安娜基金娜地球的水存在40多亿年减少了吗?科学家在一块石头上获得答案综述水是生命之源,我们地球上的所有生命诞生都离不开水。在今天也依旧如此,没有水就没有地球的今天。地球上的水储量极大,因此也有人将我们的地球戏称为水球。然而地球已经存在了大约46亿年80年前的静电之谜终于解开了在接触电荷电介质上充电马赛克。(a)在传统观点中,两种电中性材料(gra)接触,然后均匀地分离电荷(左下角),一种是正极(红色),另一种是负电荷(蓝色)。在另一种情况下(右下角),
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网