c语言字符数组与字符串应用方法是什么?

c语言字符数组与字符串应用方法是什么?

c语言字符数组与字符串应用方法是什么?

c语言字符数组与字符串应用方法:

1、字符数组的定义与初始化

字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。

立即学习“C语言免费学习笔记(深入)”;

char str[10]={ 'I',' ','a','m',' ',‘h','a','p','p','y'};

即把10个字符分别赋给str[0]到str[9]10个元素

如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 ‘’ )。

2、字符数组与字符串

在c语言中,将字符串作为字符数组来处理。(c++中不是)

在实际应用中人们关心的是有效字符串的长度而不是字符数组的长度,例如,定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符’’代表。如果有一个字符串,其中第10个字符为’’,则此字符串的有效字符为9个。也就是说,在遇到第一个字符’’时,表示字符串结束,由它前面的字符组成字符串。

系统对字符串常量也自动加一个’’作为结束符。例如”C Program”共有9个字符,但在内存中占10个字节,最后一个字节’’是系统自动加上的。(通过sizeof()函数可验证)

有了结束标志’’后,字符数组的长度就显得不那么重要了,在程序中往往依靠检测’’的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。当然,在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。(在实际字符串定义中,常常并不指定数组长度,如char str[ ])

说明:’n’代表ASCII码为0的字符,从ASCII码表中可以查到ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干。用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。

对C语言处理字符串的方法由以上的了解后,再对字符数组初始化的方法补充一种方法——即可以用字符串常量来初始化字符数组:

char str[ ]={“I am happy”};       可以省略花括号,如下所示

char str[ ]=”I am happy”;

注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的

char str[ ];  str="I am happy";

不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)作为初值。显然,这种方法更直观方便。(注意:数组str的长度不是10,而是11,这点请务必记住,因为字符串常量”I am happy”的最后由系统自动加上一个’’) 

因此,上面的初始化与下面的初始化等价

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y',''};

而不与下面的等价

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};

前者的长度是11,后者的长度是10.

说明:字符数组并不要求它的最后一个字符为’’,甚至可以不包含’’,向下面这样写是完全合法的。

char str[5]={'C','h','i','n','a'};

可见,用两种不同方法初始化字符数组后得到的数组长度是不同的。

#include void main(void){char c1[]={'I',' ','a','m',' ','h','a','p','p','y'};char c2[]="I am happy";int i1=sizeof(c1);int i2=sizeof(c2);printf("%dn",i1);printf("%dn",i2);}

结果:10   11

3、字符串的表示形式

在C语言中,可以用两种方法表示和存放字符串:

(1)用字符数组存放一个字符串

  char str[ ]="I love China";

(2)用字符指针指向一个字符串

   char* str="I love China";

对于第二种表示方法,有人认为str是一个字符串变量,以为定义时把字符串常量”I love China”直接赋给该字符串变量,这是不对的。

C语言对字符串常量是按字符数组处理的,在内存中开辟了一个字符数组用来存放字符串常量,程序在定义字符串指针变量str时只是把字符串首地址(即存放字符串的字符数组的首地址)赋给str。

两种表示方式的字符串输出都用

printf("%sn",str);

%s表示输出一个字符串,给出字符指针变量名str(对于第一种表示方法,字符数组名即是字符数组的首地址,与第二种中的指针意义是一致的),则系统先输出它所指向的一个字符数据,然后自动使str自动加1,使之指向下一个字符…,如此,直到遇到字符串结束标识符 ” “。

4、对使用字符指针变量和字符数组两种方法表示字符串的讨论

虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈。

4.1、字符数组由若干个元素组成,每个元素放一个字符;而字符指针变量中存放的是地址(字符串/字符数组的首地址),绝不是将字符串放到字符指针变量中(是字符串首地址)

4.2、赋值方式:

     对字符数组只能对各个元素赋值,不能用以下方法对字符数组赋值

     char str[14];

     str="I love China";     (但在字符数组初始化时可以,即char str[14]=”I love China”;)

     而对字符指针变量,采用下面方法赋值:

     char* a;

     a="I love China";

     或者是 char* a="I love China";       都可以

4.3、对字符指针变量赋初值(初始化):

         char* a="I love China";      

等价于:

           char* a;

    a="I love China";

而对于字符数组的初始化

          char str[14]="I love China";

不能等价于:

         char str[14];

     str="I love China"; (这种不是初始化,而是赋值,而对数组这样赋值是不对的)

4.4、如果定义了一个字符数组,那么它有确定的内存地址;而定义一个字符指针变量时,它并未指向某个确定的字符数据,并且可以多次赋值。

5、字符串处理函数 

5.1

char *strcat(char *str1,const char *2 );

char *strcat(char *strDestination,const char *strSource );

功能:函数将字符串str2 连接到str1的末端,并返回指针str1

注:连接前两个字符串的后面都有一个’ ‘,连接时将字符串1后面的 ‘ ‘去掉,只在新串最后保留一个 ‘ ‘

5.2

char *strcpy(char *str1,const char *2 );

char *strcpy(char *strDestination,const char *strSource );

功能:复制字符串strSource中的字符到字符串strDestination,包括空值结束符。返回值为指针strDestination。

注:

1、“字符数组1”必须写成数组名形式,“字符串2″可以是字符数组名,也可以是一个字符串常量

2、复制时连同字符串后面的 ‘ ‘ 一起复制到数组1中

3、不能用赋值语句直接将一个字符串常量或者字符数组直接赋给一个字符数组(同普通变量数组是一样的),而只能用strcpy函数处理。

4、可以用strcpy函数将字符串2中的前若干个字符复制到字符数组1中去。

推荐教程:《C视频教程》

以上就是c语言字符数组与字符串应用方法是什么?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1433892.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 09:34:48
下一篇 2025年12月17日 09:35:04

相关推荐

  • 适合小白入门C语言的简单教程

    适合小白入门c语言的简单教程 C语言数据变量的声明 整型变量的声明用int,如:int a; 单精度浮点型的声明用float,如:float b; 双精度浮点型的声明用double,如:double c; 立即学习“C语言免费学习笔记(深入)”; C语言基本的输入输出 从键盘输入数据用scanf()…

    2025年12月17日
    000
  • 学编程应该知道的c语言中的复数操作

    学编程应该知道的c语言中的复数操作 复数在数学运算中十分重要,在编写数值运算或者算法的时候,我们会用到复数这种概念。 那么,复数在c/c++语言中是如何表示的呢?我们接下来一一介绍。 C语言中复数 在数学中一个复数可以定义为 (z=a + bi) 的形式。 C 语言在 ISO C99 时就引入了复数…

    2025年12月17日
    000
  • C语言实现删除数组中某个元素

      C语言实现删除数组中某个元素 大家知道C语言实现删除数组中某个元素方法吗?下面将讲述在C语言中实现删除数组中某个元素的两种方法,大家一起看看吧。 方法1: /* name: c语言 删除数组的某个元素 tip: 数组元素的增/删/ 改/查(简单遍历就ok) 数组增删操作在c语言中没有相应的函数-…

    2025年12月17日
    000
  • 一定要了解的c语言中&与&&的区别

    一定要了解的c语言中&与&&的区别 c语言中&与&&的区别如下: &:按照位与操作,例如:0010&1101,结果为0000       &是java中的位逻辑运算:      eg: 2&3=2;       分析如下…

    2025年12月17日
    000
  • c语言中函数调用的方式有哪些?

    c语言中函数调用的方式有哪些? c语言中函数调用的方式: 1.最常见的,直接调用 void fun(void){ …… //你的代码 ….. }{ ……. fun(); ….. } 2.用函数指针 void fun(void) { printf(“OK!n”);} int m…

    2025年12月17日
    000
  • c语言break什么意思?

    break在一些计算机语言中是保留字,其作用大多情况下是终止上一层的循环,以C语言来说,break在switch(开关语句)中在执行一条case后跳出语句的作用。 1、 C语言中的break : break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出swi…

    2025年12月17日
    000
  • c语言fgets函数用法是什么?

    c语言fgets函数用法:fgets()函数用于从文件流中读取一行或指定个数的字符。 语法为: char * fgets(char * string, int size, FILE * stream); 参数说明: s: 字符型指针,指向存储读入数据的缓冲区的地址。 立即学习“C语言免费学习笔记(深…

    2025年12月17日
    000
  • visual c++6.0怎么新建C语言项目

    1、首先在工作区中,切换到”fileview”(文件视图)下 2、点击【文件】,选择【新建】 3、选择”c++ source File”创建源文件,然后勾选”添加到工程”,并命名文件名,点击”确定” 立即学习“C语言免费学习笔记(深入)”; 4、同理,点击”文件”,新建,在弹出的窗口中,选择”C/C…

    2025年12月17日 好文分享
    000
  • c语言怎么比较两个数的大小

    c语言怎么比较两个数的大小? 首先新建一个工程和一个.c文件 输入头文件 立即学习“C语言免费学习笔记(深入)”; 输入主函数 定义变量类型 输入2个数字 比较两个数 编译运行 注意事项 注意if语句括号后面没有分号 else语言后面没有分号 以上就是c语言怎么比较两个数的大小的详细内容,更多请关注…

    2025年12月17日 好文分享
    000
  • 如何用c语言输出100到200之间的素数

    分析: 首先找出100~200以内的所有整数,再让这些整数对除了1和它本身以外的数求余,如果有能整除的就不是素数,否则就为素数。 代码实现: #includeint main(){int conut = 0;int i = 0;for(i=100; i<=200; i++) //先找出来100…

    2025年12月17日
    000
  • c语言如何判断整数是几位数

    实现代码: #include int main(){ long long a; int count=0; printf(“请输入一个整数:”); scanf(“%lld”,&a); while(a!=0) { a/=10; count++; } printf(“输入的数字是%d位数。”,co…

    2025年12月17日
    000
  • c语言中while与do while循环的主要区别是什么

    while循环与do while循环的区别如下: 1、循环结构的表达式不同 while循环结构的表达式为:while(表达式){循环体}; do while循环结构的表达式为:do{循环体;}while (条件表达);。 2、执行时判断方式不同 立即学习“C语言免费学习笔记(深入)”; while循…

    2025年12月17日
    000
  • 0基础学c语言看什么书?

    1、C语言适合当第一门编程语言学习 ①、C语言语法相对简单,但又比较完整和严谨,包含该有的各种元素。学完C语言语法,要学习其它编程语言就很容易了。  ②、C语言接近底层,可以了解内存和计算机的基本原理。 ③、许多基础课程比如算法与数据结构教材都是以C语言为例子的,特别是中国版的书籍。 立即学习“C语…

    2025年12月17日
    000
  • c语言的四大数据类型是什么?

    c语言的四大数据类型是什么?下面本篇文章就来给大家介绍一下c语言的四大数据类型。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 现实世界中的信息存在方式多样,表示方法各有不同,如整数、实数、字符等。这些信息在计算机中也要按照一定的方式进行组织存放,以便于分析存储空间和进行运算。 C…

    2025年12月17日
    000
  • c语言中的关键字有哪些?

    C语言的关键字共有32个,根据关键字的作用,可分为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。 auto:声明自动变量 缺省时编译器默认为auto     int:声明整形变量 double:声明双精度变量 立即学习“C语言免费学习笔记(深入)”; long:声明长整形变量 ch…

    2025年12月17日
    000
  • c语言double类型默认输出几位小数?

    C语言中常用的小数有两种类型,分别是 float 或 double;float 称为单精度浮点型,double 称为双精度浮点型。不像整数,小数没有那么多幺蛾子,小数的长度是固定的,float 始终占用4个字节,double 始终占用8个字节。 c语言double类型默认输出几位小数? C语言中,输…

    2025年12月17日
    000
  • c语言可以直接对硬件进行操作吗

    c语言可以直接对硬件进行操作吗? 不能。 首先,C语言不能够直接对硬件进行操作。从本质上来说,连汇编语言都不可以。只有机器语言能够直接操作硬件。 其次,C语言要操作硬件是必须经过一系列的编译转换。最终它会成为0101的机械码,这个时候它根本不是我们所能够理解的C语言了。 以GCC编译器为例,这个可以…

    2025年12月17日
    000
  • 一个c语言程序由什么组成

    一个C语言程序是由一个main函数和若干个其他函数组成的,函数是C程序的基本单位,被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己定义的函数。 函数是一段可以重复使用的代码,用来独立地完成某个功能,它可以接收用户传递的数据,也可以不接收。接收用户数据的函数在定义时要指明参数,不接收用户数…

    2025年12月17日
    000
  • c语言主函数名是什么?

    C语言主函数名是main,main函数又称主函数,是程序执行的起点,如果有其他函数,则完成对其他函数的调用后再返回到主函数,最后由main函数结束整个程序。 具体形式如下: main(){   } 被大括号{ }括起来的内容称为main函数的函数体,这部分内容就是计算机要执行的内容。 立即学习…

    2025年12月17日
    000
  • c语言文件的扩展名是什么

    c语言文件的扩展名有: .h头文件,主要是函数、结构声明,常量定义等 .c源文件,函数定义 .dll动态链接库 立即学习“C语言免费学习笔记(深入)”; .lib静态链接库 .dsp,.dsw都是工程文件 .cpp是C++的源文件 .so 动态库文件 .a静态库文件 以上就是c语言文件的扩展名是什么…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信