精华内容
下载资源
问答
  • 如何用字符数组表示字符串三,对字符串的操作一,什么是字符数组字符数组是特殊的整数有序集合——每个整数占用一个对应的类型字节——可以用字符字面量对数组元素进行初始化或者赋值——常用来存储可阅读的文本信息...

    Hello      大家好

    欢迎关注编程猎人

    本人小白一枚

    一个立志成为分享编程干货的博主19a011b04ff247c1a9967d5fb7daa915.png

    a1a2bd6cd868d6841c91e857e268bfd6.png

    一,什么是字符数组

    二,如何用字符数组表示字符串

    三,对字符串的操作

    一,什么是字符数组

    字符数组是特殊的整数有序集合

    ——每个整数占用一个对应的类型字节

    ——可以用字符字面量对数组元素进行初始化或者赋值

    ——常用来存储可阅读的文本信息

    数组中的元素能有哪些类型呢?

    包含所有基本类型。

    例如:

    int a[] = {1, 3, 5, 8 };char b[] = {'H', 'i' };

    二,如何用字符数组表示字符串

    在C语言中,没有专门的字符串类型(字符串:用 " " 括起来的部分就是字符串 ),所以没有字符串变量。

    但是可以通过字符数组间接表示字符串变量。

    存在字符串字面量("hello."),但仅仅只能当作常量使用。

    例如:

    #define a "hello."printf("%s\n", a );

    用""括起来的都是字符串。

    用数组表示字符串,只需要在数组最后一个元素加上0元素('\0')后,才是字符串。

    问:字符串的0元素是啥?(在''中只表示一个字符,仅此而已)

    '\0'表示的是0元素。

    '0'表示的对于整数是48.

    字符数组不一定是字符串,但字符串一定是一个字符数组。

    char s[] = "hello" ;char s[] ={"hello"};char s[] = {'h', 'e', 'l', 'l', 'o', '\0' };

    输出的均是hello

    三,对字符串的操作。

    C语言中,不能直接对字符串操作,操作时需要应用字符串工具包。

    #include 

    包含的字符串工具包如下:

    strlen (s)                               获取字符串长度。

    strcpy (S1,S2)                       将S2中的字符复制给S1。

    strcat (S1,S2)                        将S2追加到S1后面。

    strcrmp (S1,S2)                    比较S1和S2是否相等,相等输出0。

    今天的分享到这里就结束了,不知道大家有没有学废呢?学废的朋友可以把“学废了”敲在留言上,或者和笔者讨论哦。

    eb53eeed090a2be617b4b16bab53d3db.png

    这是笔者的微信公众号,欢迎关注!

    展开全文
  • 而在C语言中是没有String类型的,那么如果要表示一个字符串,就必须使用字符串数组。今天主要就介绍如下三个方面: 一维数组 多维数组 字符串 一维数组 一维数组操作比较简单,但是需要注意,数组长度必须是固定的...
  • C语言数组字符串

    2019-04-18 00:15:35
    一、c语言数组 1.C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。数组可以用一些基本的数据类型来定义,int,double...

    一、c语言数组

    1.C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。数组可以用一些基本的数据类型来定义,int,double,float...,比如,定义一个整形数组  int a[10],a为数组名,a数组成员共有10个,访问数组可以运用下标访问,数组成员依次为a[0]........a[9]。

    2.数组的初始化

    比如int a[5]={1,2,3,4,5};大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。int a[]={1,2,3,4,5};这时候计算机会计算出[]里的数值。

     

    3.数组的所有数据都是由连续的内存位置组成,每个数组成员都有一块内存,它们的大小取决于数组类型,比如,开始定义的int型数组每个数组成员所占内存的大小都为4个Byte,即整形数组a[10]所占的内存的大小为40Byte。

    4.数组在处理一些同种数据类型是就比较方便,比如处理一个班所有学生的一项成绩,这时候用数组就比较方便,下面是对一组数据的排序

    5.c语言存在多维数组,上面说的都是一维数组,多维数组可以这样定义,比如定义二维整形数组a[3][3],初始化:{{1,2,3},{4,5,6},{7,8,9}};基本上数组通过循环来进行定义比较方便。多维数组的访问也是用过下标来进行。比如下面:

    二、字符串

    1.在 C 语言中,由但撇号括起来的单个字符叫字符常量,例如'a','b','+','%'...,由双撇号括起来的叫字符串常量,例如"abc","你好",而字符串实际上是使用 null 字符 '\0' 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。下面声明和初始化一个"Hello"的字符串,由于在数组的末尾储存了空字符,所以字符数组的大小比字符"Hello"的字符数多一个。

    char a[6]={'H','e','l','l','o','\0'};

    也可以这样初始化:c编译器会在字符串初始化时自动把'\0'放在字符串的末尾。

    char a[6]="Hello";

    一个字符在内存中占一个字节,字符串里的内存也是连续的,由于字符串末尾会有'\0',所以计算字符串的内存大小时会多一个字节,即上面的字符串a占6个字节。

    2.c语言中有一些操作字符串的函数

    这些函数都包含在string.h的头文件中

    1. strcpy(s1,s2)//复制字符串s2到字符串s1
    2. strcat(s1,s2)//连接字符串s2到字符串s1的末尾,注意字符串s1的长度要足够大来连接字符串s2
    3. strcmp(s1,s2)//用于比较两个字符串,若s1=s2,则返回0,若s1>s2,则返回>0,若s1<s2,则返回<0
    4. strlen(s1)//返回字符串s1的长度

    具体例子如下:

    3.sizeof()与strlen()的区别

    strlen是一个函数,它计算的是字符串的长度,以'\0'作为长度判断的标志,而sizeof是一个运算操作符,计算的是变量的大小,不受'\0'的影响。

    4.'a'与"a"的区别在于' '里只能放单个字符,而" "表示一个字符串即'a'+'\0'。字符串在如下的方式初始化时需要注意结尾必须加'\0',不然就会程序就会出现错误,而用第二种方式不需要加'\0'。

    char a[]={'h','e','l','l','o','\0'};
    char a[]={"hello"};

     

    展开全文
  • C语言数组字符串

    千次阅读 多人点赞 2018-11-20 01:55:35
    最近各大工作室都发布了一些与字符串有关的题目,同学们在写有关字符串的题目...字符串也是如此,它在存储上类似字符数组,且其单个元素都是可以提取的,这点像每一粒葡萄都可以单独取下来; 对于字符串,我们需要...

    最近各大工作室都发布了一些与字符串有关的题目,同学们在写有关字符串的题目时候会感到吃力,或是无从下手,没有思路,或是一些基本的知识不明白。这里我就讲解下与字符串有关的基本知识

    字符串,它是由多个字符组成的序列。可以想象成葡萄架上垂挂着的一串葡萄,每一粒葡萄都相当于是字符;字符串也是如此,它在存储上类似字符数组,且其单个元素都是可以提取的,这点像每一粒葡萄都可以单独取下来;

    对于字符串,我们需要了解以下几点:
    1:字符串的定义与如何初始化。
    2:字符在数组里面如何存放的。
    3:字符串的注意事项。
    4: 结合到题目该如何写

    我就这三点展开来说明,首先对于第一点:
    1:字符串的定义与如何初始化。
    上一篇博客讲了有关数组的基础知识,里面也介绍了点关于字符数组的定义与初始化:

    char Str1[50]; //定义一个长度为50的字符数组
    char Str2[20] = "Hydrogen"; //定义一个字符数组,并且赋初始值 Hydrogen
    //char Str2[20] = {"Hydrogen"}; 和上面等价
    

    这里需要注意两点
    1:C语言中字符串都会有一个结束标志,即 ‘\0’ ,这个字符在ACSII码表中为第一个,其值为0。空字符,这是字符串中作为结束的判断标记。
    当输出函数列入 puts(); printf(); 在输出数据的时候,遇到 ‘\0’ 就会结束输出。
    而这个空字符 ,因为是字符,所以也会占据一个字节的空间,这就导致我们在定义数组长度的时候要考虑这个空字符。以下举例说明:

    char Str[8] = "Hydrogen"; // 错误
    char Str[9] = "Hydrogen"; //正确
    //只考虑字母只有8个,但是由于空字符的存在,所以这里必须是9个长度
    

    2:在你定义了一个字符数组并且为其赋值后,其后没有填上字符的元素,编译器会自动帮你加上 \0.
    在这里插入图片描述
    如图所示,那些未填充字符的数组元素全部都是 空 的。

    str[0] str[1] str[2] str[3] str[4] str5] str[6] str[7] str[8] str[9]
    H y d r o g e n \0 \0 \0

    这里拓展一点关于printf()函数输出顺序的知识:有同学可能注意到了,我的 整形变量i
    一开始是从0开始的,而这里输出的确是从1开始的,这是为啥呢? 原因是在printf();函数中,数据输出是从右往左的
    所以在这里首先执行的是 i++, 自增1后在输出i,也就是从1开始了。

    2:字符在数组里面如何存放的。
    结合上面那张图片,可以注意到一个数组元素存放着一个字符,也就是说,字符在数组里面存放是一个一个存放的;字符包是表示数据和信息的字母、数字或其他符号。
    A,B,C,a,b,c是字符,1, 2, 3 也是字符 , . / ? ! = - * & ( ) 同样也是字符
    空格也是一个字符,也可以存放进数组里面
    这里直观的演示下一个字符串的输出和每一个字符对应的ACSII码的程序:
    在这里插入图片描述
    可以注意到,一个空格对应的ACSII码是 32.
    还可以注意到,当我用%d输出一个字符的时候,得到的结果是它的ASCII码。

    3:字符串的注意事项。

    ① 输入字符串有多种方式,上一篇博客中讲到了那几点。这里再强调一下,字符串若是有空格的输入,那么不能选择scanf()函数来进行。
    ② 要小心回车的存在,这个可能会使一段逻辑语法都没错的代码无法运行出正确的结果。下面用一个例子来说明:
    我想分别输入两个字符H 和 2, 并且输入一次回车一次:
    结果确实
    在这里插入图片描述
    观察运行结果可以知道,c2的值对应的ASCII码的值是10,这个换行符在ASCII码表中对应的字符是一模一样的。
    也就是说,在我输入数据的时候,H 回车 就结束了,c2获取的值是回车的值,而这个回车是我们原本就不需要的,这时候咋办呢?就可以借助 fflush(stdin);
    在这里插入图片描述
    如何解释这种奇怪的结果呢? 结合第一篇博客所讲的内容,缓冲区和scanf()函数读取数据的知识就可以解释了,输入数据回车后,回车遗留在了缓冲区内,等待下一个scanf()函数调用,即把回车这个ASCII码赋给了c2。 所以这里只需要清空下缓冲区即可。
    另一个可以解决这种问题的方法是在第一个scanf()函数后面加一个getchar(); 该函数也会从缓冲区读取一个字符,这里将回车给读取掉了。
    输入数据的时候:

    缓冲区: H \n
    调用一次scanf函数读取

    scanf首先读走了H,此时缓冲区:

    缓冲区: \n NULL
    调用一次scanf函数读取

    下一次调用scanf();函数的时候,\n 就给了c2。

    若加了fflush(stdin);后,在输入H回车 完毕后,
    缓冲区就空掉了:

    缓冲区: NULL NULL
    调用一次scanf函数读取

    在这里插入图片描述


    4: 结合到题目该如何写
    例一:
    输入两串字符串:10 20 要求输出它们相加的结果 30
    如果直接让他们对应的个位十位相加得出结果会是怎样的呢?
    答案肯定是不正确的,代码和结果如下:

    这里为什么是1086呢?
    这是因为,直接让字符相加,他们的结果是对应字符的ASCII码进行相加,

    字符 0 1 2
    ASCII 48 49 50

    所以(49+50) * 10 + 96 = 1086
    知道了计算法则是对应元素的ASCII码相加后,那就好办了:
    我们只需要让该字符减去某一个数字,让它相加的时候就是以该数字本身相加即可。
    观察上面的表格,不二之选就是减去’0’啦,注意这里是减去字符0,或者减去0本身对应的ASCII码。二者一样。

    字符-48 0-48 1-48 2-48
    ASCII 0 1 2

    这样更改后:

    就可以运行出我们想要的结果了。
    例2:
    给定一个字符串,判断其是否为回文字符串
    从最简单的一串回文串进行分析:ABCCBA
    假如我们人眼进行判断,要么从外向内一一比较:AABBCC
    要么从内向外CCBBAA。
    只要是有一个不符合的,则就不是回文串。那思路就很明显了:
    从字符串的两侧进行一一比较,若找到一对不相等的字符,则输出否。
    全部比较完毕后,还没有找到不相等的,则就是回文的。
    并且比较的次数是字符串长度的一半。
    在这里插入图片描述
    其他测试结果:在这里插入图片描述


    其他需要用到字符串的题目,也是如此,先分析题目,在结合与字符串有关的知识进行解答,合理的运用循环,判断等语法知识就可以了。
    最后说一点,字符串里面重要的一个字符是结束符(空字符),它决定了字符串在哪里结束,有些时候我们需要自己设置结束符,或者在某些题目里面,比如两个字符元素的两两交换,就有可能会改变空字符的位置,从而导致一些无法预知的bug出现。
    若遇到这种情况,我们大可用printf() + 循环结构,来输出此时数组内部元素的情况,以此来更好的找出bug,解决bug。
    (如有错误欢迎指出)

    展开全文
  • 数组C语言中有着特殊的地位,它有很多特性,例如它的存储是连续的,数组的名称就是数组的地址等。而在C语言中是没有String类型的,那么如果要表示一个字符串,就必须使用字符串数组
  • C语言 数组字符串

    2015-03-02 16:50:50
    数组字符串 数组  一组具有相同数据类型 固定长度 在内存中是一段连续的存储区 --------------------------------  int a; a=3; -------------------...

    数组和字符串


    数组

        一组具有相同数据类型 固定长度 在内存中是一段连续的存储区

    -------------------------------- 

    int a;

    a=3;


    -----------------------------------------------------

    int stu[10]; //数组的定义


    类型 数组名[数组长度]


    当数组定义以后就会在内存中分配一段连续的存储区

      类型长度X数组长度

      

    数组的每个元素相当于一个变量

    可以在编程中对每个元素赋值


    stu[0]=33;


    stu[4]=55;


    数组元素的下标从 0开始 到数组的长度-1

    ------------------------------------------------------

    字符数组

    char username[12]={'w','a','n','g','y','i','\0'};

    char password[12];

    '\0'表示字符数组的结束,一般情况下不处理\0后面的字符


    字符数组也称为字符串

    定义时候直接赋值

    char username[12]={'w','a','n','g','y','i','\0'};

    char username[12]="wangyi";


    输出字符串时候

    printf("%s",字符数组名称);

    输入字符数组

    scanf("%s",字符数组名)


    ---------------------------------

    多维数组

    int stu[4][10]={{1,2,3,4,5,6,7,8,9,33},

                    {1,2,3,4,5,6,7,8,9,33},    

                    {1,2,3,4,88,6,7,8,9,33},

                    {1,2,3,4,5,6,7,8,9,33},

                    };


    stu[2][4]=88;

    二维数组相当于一个一维数组的每个元素都是一个数组

    展开全文
  • Four Day 一、数组 数组:是按一定顺序排列...整型常量表达式代表数组具有的数组元素个数数组元素的下标一律从0开始编译程序为数组开辟连续的存储单元,用来顺序存放数组的各数组元素用数组名表示该数组存储区的首地址
  • 流式文件:由一个个字符(字节)数据顺序组成 按存储介质: 普通文件:存储介质文件(磁盘、磁带等) 设备文件:非存储介质(键盘、显示器、打印机等) 按数据的组织形式: 文本文件: ASCII文件,每个字节存放...
  • C程序内存分配 栈区(stack) - 由编译器自动分配释放,存放函数的参数名,局部变量名等。 堆区(heap) - 有程序员分配和释放,它与数据结构中的堆是两回事。...文字常量区 - 常量字符串存放位置 程序代码区 - 存放函...
  • 数组的基本概念及分类  数组:把具有相同类型的若干变量安装有序的形式组织起来。这些按序排列的同类型数据的集合称为数组。  数组元素:构成数组的数据。每个数组元素有相同的名称,不同的下标。... 按存储
  • 数组中定义一个字符串,该字符串由“ abcdef ” 组成,所谓左旋即是让左边的第一个字符旋转到右边去,左旋一个字符即是产生“ bcdefa ”这样的字符串,右旋与之相反。  为了控制左(右)旋的字符数,需要制作一...
  • 1一维数组 数组在编译时分配的内存是连续的。 sizeof(数组名)返回值是整个数组的长度。数组名代表数组首地址,不能用++。数组可以用变量定义长度,数组定以后,变量改变不影响数组...按照行连续存储。 初始化可省
  •   数组就是是用来存储一...定义 声明数组的类型 声明数组的元素个数(需要多少存储空间) 格式 元素类型 数组名[元素个数]; 比如:int ages[3]; 简单使用 简单初始化:int ages[5] = {19, 19, 20, 21, 25};...
  • 代码如下,使用二维数组存储字符串,buf[4]为什么不等于NULL ``` void main() { char buf[][10] = { "1111", "2222", "3333", "4444", NULL }; printf("sizeof buf = %d\r\n", sizeof(buf)); if ...
  • 运算符优先级自右向左记忆口诀条件赋值自增减(?...高字节在【高地址】存储单元,低字节在【低地址】存储单元。16位的内存中-65537与-1在内存中的值是一样的。16位的内存中-65535与1在内存中的值...
  • 如何用字符数组表示字符串三,对字符串的操作一,什么是字符数组字符数组是特殊的整数有序集合——每个整数占用一个对应的类型字节——可以用字符字面量对数组元素进行初始化或者赋值——常用来存储可阅读的文本信息...
  • 数组字符串 构造类型之一 具有一定顺序关系的若干个变量的集合, 组成数组的各个变量称为数组元素 数组元素的数据类型相同, 用数组名和下标确定. 数组可以是多维的, 也可以是多维的 一、数组 1.1 一维数组 只有...
  • c语言字符数组字符串:1.存放字符的数组称为字符数组 char str[]2.'\0'也被称为字符串结束标志3.由" "包围的字符串会自动在末尾添加'\0'4.逐个字符地给数组赋值并不会自动添加'\0'5.局部变量初始化为零值会自动添加...
  • #define _CRT_SECURE_NO_WARNINGS#include #include #include //使用字符数组存储字符串void main() {//三种写法//\0代表 结束符char str[] = { 'h','e','l','l','o','\0' };//char str[6]= { 'h',...
  • 复制字符串数组 target指向用于存储复制内容的目标数组,类型强制转换为void*指针。 surce指向要复制的数据源,类型强制转换为void*指针。 len代表要复制的字节个数。 memcmp(s0,s1,len) 比较两个字符串数组 s0和...
  • 1、掌握一维数组的作用**数组:**构造数据类型之一数组是...**一维数组**所谓一维数组是指只有一个下标的数组,它在计算机的内存中是连续存储C语言中,一维数组的说明一般形式如下: [];例:int a[6] a存放是数...
  • 字符数组现在让我们把已经习惯的int型数组转换为char型。一般来讲,char型数组通常是用于'a', 'b', 'c', 'd'这类具有可读性的字符。在《类型与变量》一节中讲过,char类型的数据占用1个字节的存储空间,本质上它是一...
  • 预备知识:变量在内存的不同区域介绍C语言中,字符数组和字符串指针都可以用来存储字符串:char *pstr = "china";char str[] = "china";但两者在内存中的存储区域是不一样的:字符指针的字符串存储在常量区;而字符...
  • c语言数组字符串

    2015-07-22 16:04:00
    1. “数组名代表了数组存储首地址,是一个地址常量”。...p1指向的这个字符串是个常量, 不可改变, 程序在编译期间就为"A String."这个字符串分配了固定的空间, 它被存储在全局静态区中. 而p2是个变量, ...
  • C语言数组字符串

    2016-04-08 18:25:56
    数组的使用 //----对一维数组的输入int a[5],i; //数组必须先定义后使用,且在定义时,必须指定数组的长度。比如这里不能这样 int a[].for(i=0;i;i++) ...//由于数组元素存储类型为int,所以在输入一个
  • 存储字符串, 字符数组的初始化 1)字符数组可以进行部分初始化,系统默认未被初始化的元素赋值为0-------’\0’空字符 2)初始化时,长度可以省略不写,分配的空间的大小由初始化列表中的元素来决定 3)字符数如果...
  • 一、字符串的双引号问题 字符串的双引号做了3件事: 申请了空间(在常量区),存放了字符串 ; 在字符串尾加上了’/0’ ; 返回地址。 char *str = “hello”; /* 把地址赋值给str */ /* "hello"表达式使用的值...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,963
精华内容 785
关键字:

c语言数组存储字符串

c语言 订阅