C语言字符串替换:字符,字符串,字符数组详解

 更新时间:2021年9月1日 21:30  点击:1509

案例描述

字符串替换是处理字符串时最常见的操作之一,也是学习字符串必须掌握的知识。本案例要求通过编程实现字符串“Good moring”到“Good evening”的转换。

案例分析

我们需要从字符串中被替换的位置开始,将要替换的内容逐个复制到原字符串中,直到字符串结束或者替换的字符串结束为止。

为了顺利完成案例,需要先学习字符数组,字符串,字符指针等基础知识。

必备知识

1,字符数组

字符数组是存放字符数据的数组,其中每一个元素都是单个字符

(1)字符数组的定义

字符数组定义的语法格式如下:

char 数组名[常量表达式]; 
char 数组名[常量表达式1][常量表达式2]

在上述语法中,分别列举了定义一维字符数组和二维字符数组的方法。

示例代码如下:

char ch[6];

(2)字符数组的初始化

在数组定义的同时也可以对数组中的元素进行赋值,这个过程称为数组的初始化,示例代码如下:

char c[5] = {'h','e','l','l','o'};

注意

字符数组的初始化很简单,但要注意以下几点。

(1)元素个数不能多于字符数组的大小,否则编译器会出错

(2)如果初始项少于数组长度,则空余元素均会被赋值为空字符(‘\0')

(3)如果没有指定数组大小,则编译器会根据初始项的个数为数组分配长度

(4)也可以初始化二维数组

(和整型数组基本一致)

2,字符串概念

(1)字符串的概念

字符串是由数字、字母、下划线和空格等各种字符组成的一串字符,是个常量,字符串的末尾都默认有一个'\0'作为结束符。

"abcde"
"     "

上面这两行都是字符串,只不过第二个字符串中的字符都是空格

字符串在各种编程语言中都是非常重要的数据类型,但是C语言中没有字符串的固定类型,通常用字符数组的形式来存储和处理字符串,这种字符数组必须以'\0'结尾。当把一个字符串存入一个字符数组时,也应把结束符存入数组,因此该字符数组的长度是实际字符数加一。

(2)用字符初始化字符数组

为了便于对字符数组进行初始化操作,可以直接使用一个字符串常量来为另一个字符数组赋值,具体实例如下:

char char_array[6] = {"hello"};
char char_array[] = {"hello"};

(3)获取字符串的长度

字符串用数组来存储,用sizeof运算符来求取各种数据类型的长度,sizeof运算符也可以用来求字符串的长度,例如sizeof(“abcde”)。

除了可以使用sizeof运算符外,还可以使用strlen()函数来获取字符串长度,strlen()函数原型如下:

unsigned int strlen(char *s);

其中s是指向字符串的指针,返回值是字符串的长度。需要注意的是,使用strlen()函数得到的字符串并不包括末尾的空字符'\0'。

sizeof运算符和strlen()函数在求字符串时是有所不同的

两者的区别具体如下:

1,sizeof是运算符,strlen()函数是C语言标准库函数,包含在string.h头文件里

2,sizeof运算符功能是获得所建立对象的字节大小,计算类型所占内存;strlen()函数是获得字符串所占内存的有效字节数。

3,sizeof运算符的参数可以是数组,指针,类型,对象和函数等;strlen()函数的参数必须是指向以'\0'结尾的字符串的指针

4,sizeof运算符计算大小在编译时就完成,因此不能用来计算动态分配内存的大小;strlen()函数结果要在运行时才能计算出来

注意

C语言中的字符串实际上是字符数组,而字符是一种基本数据类型,在字符和字符串之间进行转换是很容易的,接下来,将char a = ‘A'转化为字符串,具体步骤如下:

(1)创建一个长度为2的字符数组:

char a_str[2];

(2)将第一个元素设置为对应的字符,第二个元素设置为空字符

a_str[0] = a;
a_str[1] = '\0';

同理将字符串转化为多个字符也很简单,具体示例如下:

char a_str[] = "AB";
char a = a_atr[0];
char b = a_atr[1];

在上述代码中,定义了一个字符数组a_str[],该字符数组中保存的是字符串“AB”。只要将字符串的每个字符赋值给字符变量a,b,就可以完成字符串转化为字符的操作。

3,字符串与指针

在C语言中,字符型指针用char * 来定义,它不仅可以指向一个字符型常量,还可以指向一个字符串。为了描述字符串与指针之间的关系,示例代码如下:

char char_array[] = "hello";
char* ch = char_array;

以上代码,字符指针ch即指向字符‘h'又指向字符串“hello”:如果以“%c"输出,则只输出当前指针指向的字符;如果以“%s”输出,则会输出后面的连续内存空间的数据,直到遇到‘\0'为止。

4,字符数组与字符指针

字符数组与字符指针,也可以取数组地址赋值给字符型指针。字符数组与字符指针围绕字符串有千丝万缕的关系,接下来总结一下两者的区别与联系:

(1)存储方式

字符数组在用字符串初始化时,这个字符串就存放在了字符数组开辟的内存空间中;而字符指针变量在用字符串常量初始化时,指针变量中存储的是字符串的首地址,但字符串存储在常量区。

上面的文字比较晦涩,下面通过一段示例代码来辅助理解,具体如下:

char str[6] = "hello";
char*p = "hello"

上面两行代码中定义的变量在内存区的存储方式如图:

在这里插入图片描述

(2)初始化与赋值方式

初始化方式
可以对字符指针变量赋值,但不能对数组名赋值。示例代码如下:

char *p = "hello";   //等价于char *p ;p = "hello";
char str[6] = "hello";  //char atr[6];str = "hello";这种写法错误

赋值方法

使用数组定义的字符串只能通过为数组中的元素逐一赋值或通过调用赋值函数的方式来赋值,而使用指针定义的字符串还可以实现直接赋值。示例代码如下:

char *p1 = "hello" ,*p2; p1 = p2;
char str1[6] = "hello" ,str2[6];
//str1 =str2 错误,数组赋值不可行

(3)字符指针与数组名

字符指针变量是可以改变的,而数组名是一个指针常量,其值不可以改变,代码示例如下:

char *p = "hello world";
p += 7;  //字符指针变量可以改变

对字符数组char str[6] = "hello"来说,数组名是常量指针,不可改变

(4)字符串中字符的引用

可以用下标法和地址法引用数组元素,同样的,也可以用地址法,指针变量加下标法来引用字符串的字符元素,示例代码如下:

char *p str[100] = "hello world";
char ch1 = str[6];
char *p = "hello world";
char ch2 = p[6]; //等价于char ch2 = *(p + 6)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注猪先飞的更多内容!

[!--infotagslink--]

相关文章

  • C语言实现放烟花的程序

    这篇文章主要为大家详细介绍了C语言实现放烟花的程序,有音乐播放,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-23
  • C语言中的字符(char)详细讲解

    本篇文章主要介绍C语言中char的知识,并附有代码实例,以便大家在学习的时候更好的理解,有需要的可以看一下...2020-04-25
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • c#中判断字符串是不是数字或字母的方法

    这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • 详解如何将c语言文件打包成exe可执行程序

    这篇文章主要介绍了详解如何将c语言文件打包成exe可执行程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-25
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • C# 16 进制字符串转 int的方法

    这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 获取中文字符串的实际长度代码

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • C语言中计算正弦的相关函数总结

    这篇文章主要介绍了C语言中计算正弦的相关函数总结,包括正弦和双曲线正弦以及反正弦的函数,需要的朋友可以参考下...2020-04-25
  • 详解C语言中的rename()函数和remove()函数的使用方法

    这篇文章主要介绍了详解C语言中的rename()函数和remove()函数的使用方法,是C语言入门学习中的基础知识,需要的朋友可以参考下...2020-04-25
  • php 中英文混合字符串截取

    文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
  • C#实现对字符串进行大小写切换的方法

    这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25