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

来源:脚本之家  责任编辑:小易  
目录
案例描述
案例分析
必备知识
1,字符数组
(1)字符数组的定义
(2)字符数组的初始化
2,字符串概念
(1)字符串的概念
(2)用字符初始化字符数组
(3)获取字符串的长度
3,字符串与指针
4,字符数组与字符指针
总结

案例描述

字符串替换是处理字符串时最常见的操作之一,也是学习字符串必须掌握的知识。本案例要求通过编程实现字符串“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)

总结

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

您可能感兴趣的文章:c语言字符数组与字符串的使用详解C语言实现字符串操作函数的实例与ASCII码相关的C语言字符串操作函数C语言字符串操作总结大全(超详细)

  • 本文相关:
  • c语言文件操作大全
  • c/c++常用函数易错点分析
  • c语言 函数指针(指向函数的指针)详解
  • c++ 中随机函数random函数的使用方法
  • 如何在二叉树中找出和为某一值的所有路径
  • c++实现leetcode(107.二叉树层序遍历之二)
  • 谈谈c++学习之pair的使用方法
  • 用c++实现推箱子小游戏
  • 二叉搜索树的插入与删除(详细解析)
  • c++画正弦线实例代码
  • C语言中如何用一个字符串替换一个主串中的子串
  • c语言 把某一字符串中的其中一段字符串替换成另一串字符串。
  • C语言字符串替换程序,代码是正确的,就是看不懂
  • 谁帮我用C语言,写一个字符串替换函数,
  • C语言不用指针如何用一个字符串代替另一个字符串
  • C语言文件中字符串的查找与替换
  • C语言字符替换
  • c语言字符替换
  • C语言实现将一个字符串里的一个子字符串替换为另一个, 比如...
  • c语言字符替换改错。下列程序功能是输入一个字符串,并将其中...
  • C语言怎么把一个字符串用另一个字符串替换
  • c语言求助:将字符串s中的子字符串s1全部替换为子字符串s2.用...
  • c语言 如何通过向字符串输入方式代替原有字符串 并且原有 字...
  • C语言 字符串替换replace() 求加每句注释...........谢谢. ....没分了...
  • C语言如何从字符串数组中找到一个特定的字符串并用一个新的...
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全c#教程vbvb.netc 语言java编程delphijavaandroidiosswiftscala易语言汇编语言r语言其它相关首页c 语言c语言字符数组与字符串的使用详解c语言实现字符串操作函数的实例与ascii码相关的c语言字符串操作函数c语言字符串操作总结大全(超详细)c语言文件操作大全c/c++常用函数易错点分析c语言 函数指针(指向函数的指针)详解c++ 中随机函数random函数的使用方法如何在二叉树中找出和为某一值的所有路径c++实现leetcode(107.二叉树层序遍历之二)谈谈c++学习之pair的使用方法用c++实现推箱子小游戏二叉搜索树的插入与删除(详细解析)c++画正弦线实例代码c语言程序设计50例(经典收藏)c语言10个经典小程序c语言字符串操作总结大全(超详细c语言文件操作函数大全(超详细)c语言运算符优先级列表(超详细)c语言字符数组与字符串的使用详解c语言/c++中如何产生随机数c++中的string常用函数用法总结深入理解c++中public、protectedc++常用字符串分割方法实例汇总数据结构与算法中二叉树子结构的详解c语言中const和c++中的const 区别详解android app仿微信界面切换时tab图标变色c++ 写的urlencode和urldecode实例浅析c/c++变量在内存中的分布c++实现扫雷游戏c++常用字符串分割方法实例汇总全面解析设计模式中的建造者模式及相关c+c语言之字符串模糊查询方法的实现详解c语言位域的使用与注意事项
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved