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)

总结

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

(0)

相关推荐

  • C语言字符串操作总结大全(超详细)

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串strncmp(p, p1, n) 比较指定长度字符串 strchr(p, c) 在字符串中查找指定字符 strrchr(p, c) 在字符串中反向查找 strstr(p, p1

  • 与ASCII码相关的C语言字符串操作函数

    C语言toascii()函数:将字符转换成对应的ASCII码 头文件: #include <ctype.h> 定义函数: int toascii(int c); 函数说明:toascii()会将参数c 转换成7 位的unsigned char 值,第八位则会被清除,此字符即会被转成ASCII码字符. 返回值:将转换成功的ASCII 码字符值返回. 范例:将int 型a 转换成ASSII 码字符. #include <stdlib.h> main(){ int a = 217; ch

  • C语言实现字符串操作函数的实例

    C语言实现字符串操作函数的实例 在编写程序的过程中,我们经常使用到一些字符串函数,例如求字符串长度,拷贝字符串--,这些函数都在C标准库中存在,我们可以直接使用.但我们还需要掌握这些函数的实现方法,今天来看看一些常用的字符串操作函数的实现方法. 1.strlen strlen是用来求字符串长度的函数,字符串长度就是它所包含的字符个数. 今天给大家介绍三种实现strlen函数的方法 (1)定义一个计数器count //方式一:定义一个计数器 size_t my_strlen(const char

  • c语言字符数组与字符串的使用详解

    1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理:若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\0' ). 2.字符数组与字符串在c语言中,将字符串作为字符数组来处理.(c++中不是)在实际应用

  • C语言中长度为0的数组详解

    目录 概述 使用方式 总结 概述 长度为0的数组在标准c和c++中是不合法的,但是在gcc中是可行的. 长度为0数组它的最典型的用法就是位于结构体中的最后一项. 使用方式 如下面的例子,分别使用长度为0的数组和指针声明结构体,实现可变长度的数组功能: #include <stdio.h> #include <stdlib.h> struct test1 { int a; int b[0]; }; struct test2 { int a; int *b; }; struct tes

  • C语言字符串数组详解

    C语言字符串数组 字符串是连续的字符序列,最后以空字符'\0'作为终止符.一个字符串的长度指所有字符的数量,但不包括终止符.在 C 语言中,没有字符串类型,自然也就没有运算符以字符串为操作数. 字符串被存储在元素类型为 char 或宽字符类型数组中(宽字符类型指 wchar_t.char16_t 或 char32_t).宽字符组成的字符串也称为宽字符串(wide string). C 标准库提供了大量的函数,它们可以对字符串进行基本操作,例如字符串的比较.复制和连接等.在这些传统的字符串函数以外

  • C++ 中字符串操作--宽窄字符转换的实例详解

    C++ 中字符串操作--宽窄字符转换的实例详解 MultiByteToWideChar int MultiByteToWideChar( _In_ UINT CodePage, _In_ DWORD dwFlags, _In_ LPCSTR lpMultiByteStr, _In_ int cbMultiByte, _Out_opt_ LPWSTR lpWideCharStr, _In_ int cchWideChar ); 参数描述: CodePage:常用CP_ACP.CP_UTF8 dwF

  • C语言编程C++旋转字符操作串示例详解

    目录 旋转字符串 字符串左旋 题前认知: 暴力移位: 三步翻转: 判断字符串旋转 题前认知 字符串追加判断 旋转字符串 字符串左旋 实现一个函数,可以左旋字符串中的k个字符. 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 题前认知: 一个字符串如果就定死了.eg:char arr[]="dfdf"什么的那多没意思,一点都没有人机交互的感觉,(虽然现在人机交互适合个体,不适合集群,但也是比死板的定死字符串舒服) 所以字符串得是我们可输入的,才有可玩性,玩的不

  • C语言实现短字符串压缩的三种方法详解

    目录 前言 一.通用算法的短字符压缩 二.短字符串压缩 (1)Smaz (2)Shoco (3)Unisox2 三.总结 前言 上一篇探索了LZ4的压缩和解压性能,以及对LZ4和ZSTD的压缩.解压性能进行了横向对比.文末的最后也给了一个彩蛋:任意长度的字符串都可以被ZSTD.LZ4之类的压缩算压缩得很好吗? 本篇我们就来一探究竟. 一.通用算法的短字符压缩 开门见山,我们使用一段比较短的文本:Narrator: It is raining today. So, Peppa and George

  • 基于JavaScript中字符串的match与replace方法(详解)

    1.match方法 match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配. match()方法的返回值为:存放匹配结果的数组. 2.replace方法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. replace方法的返回值为:一个新的字符串. 3.说明 以上2个方法的参数在使用正则表达式时主要添加全局g,这样才能对字符串进行全部匹配或者替换. 示例代码: <!DOCTYPE html> <html lang

  • Java实现字符串转为驼峰格式的方法详解

    字符串转为驼峰格式 构建工具类 package com.yt.common.util; import com.yt.common.dto.NameCode; import com.yt.exam.enums.ZyEnum; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 字符串转为驼峰格式 构建工具类 * @author LYY * @date 2022/07

  • Python字符串常用方法以及其应用场景详解

    目录 前言 一.最大化最小化方法 二.统计次数方法 三.去掉左右侧字符方法 四.字符串分隔方法 五.字符串替换方法 六.字符串拼接方法 七.判断是否为数字的方法 八.判断是否为空格的方法 九.判断前缀和后缀的方法 补充:更多Python字符串常用方法 总结 前言 字符串作为一种重要的Python基本数据类型,在数据处理中发挥着不可或缺的作用,如果对它的方法能够灵活使用,能够达到事半功倍的效果.下面我们选取一些常用的方法,简述其应用场景. 一.最大化最小化方法 字符串的最大化方法upper()和最

  • C# 从 UTF-8 流中读取字符串的正确方法及代码详解

     我们下面的代码是从一个流 stream 中读取 UTF-8 编码的字符串.我们可以先考虑一下其中存在的潜在问题. string ReadString(Stream stream) { var sb = new StringBuilder(); var buffer = new byte[4096]; int readCount; while ((readCount = stream.Read(buffer)) > 0) { var s = Encoding.UTF8.GetString(buf

  • java暴力匹配及KMP算法解决字符串匹配问题示例详解

    目录 要解决的问题? 一.暴力匹配算法 一个图例介绍KMP算法 二.KMP算法 算法介绍 一个图例介绍KMP算法   代码实现 要解决的问题? 一.暴力匹配算法 一个图例介绍KMP算法 String str1 = "BBC ABCDAB ABCDABCDABDE"; String str2 = "ABCDABD";     1. S[0]为B,P[0]为A,不匹配,执行第②条指令:"如果失配(即S[i]! = P[j]),令i = i - (j - 1),

随机推荐