- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章C语言字符串替换:字符,字符串,字符数组详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
字符串替换是处理字符串时最常见的操作之一,也是学习字符串必须掌握的知识。本案例要求通过编程实现字符串“Good moring”到“Good evening”的转换.
。
我们需要从字符串中被替换的位置开始,将要替换的内容逐个复制到原字符串中,直到字符串结束或者替换的字符串结束为止.
为了顺利完成案例,需要先学习字符数组,字符串,字符指针等基础知识.
。
字符数组是存放字符数据的数组,其中每一个元素都是单个字符 。
字符数组定义的语法格式如下:
char 数组名[常量表达式]; char 数组名[常量表达式1][常量表达式2]
在上述语法中,分别列举了定义一维字符数组和二维字符数组的方法.
示例代码如下:
char ch[6];
在数组定义的同时也可以对数组中的元素进行赋值,这个过程称为数组的初始化,示例代码如下:
char c[5] = {'h','e','l','l','o'};
注意 。
字符数组的初始化很简单,但要注意以下几点.
(1)元素个数不能多于字符数组的大小,否则编译器会出错 。
(2)如果初始项少于数组长度,则空余元素均会被赋值为空字符(‘\0') 。
(3)如果没有指定数组大小,则编译器会根据初始项的个数为数组分配长度 。
(4)也可以初始化二维数组 。
(和整型数组基本一致) 。
字符串是由数字、字母、下划线和空格等各种字符组成的一串字符,是个常量,字符串的末尾都默认有一个'\0'作为结束符.
"abcde" " " 。
上面这两行都是字符串,只不过第二个字符串中的字符都是空格 。
字符串在各种编程语言中都是非常重要的数据类型,但是C语言中没有字符串的固定类型,通常用字符数组的形式来存储和处理字符串,这种字符数组必须以'\0'结尾。当把一个字符串存入一个字符数组时,也应把结束符存入数组,因此该字符数组的长度是实际字符数加一.
为了便于对字符数组进行初始化操作,可以直接使用一个字符串常量来为另一个字符数组赋值,具体实例如下:
char char_array[6] = {"hello"};char char_array[] = {"hello"};
字符串用数组来存储,用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,就可以完成字符串转化为字符的操作.
在C语言中,字符型指针用char * 来定义,它不仅可以指向一个字符型常量,还可以指向一个字符串。为了描述字符串与指针之间的关系,示例代码如下:
char char_array[] = "hello";char* ch = char_array;
以上代码,字符指针ch即指向字符‘h'又指向字符串“hello”:如果以“%c"输出,则只输出当前指针指向的字符;如果以“%s”输出,则会输出后面的连续内存空间的数据,直到遇到‘\0'为止.
字符数组与字符指针,也可以取数组地址赋值给字符型指针。字符数组与字符指针围绕字符串有千丝万缕的关系,接下来总结一下两者的区别与联系:
(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)
。
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我的更多内容! 。
原文链接:https://blog.csdn.net/yusihe/article/details/120024086 。
最后此篇关于C语言字符串替换:字符,字符串,字符数组详解的文章就讲到这里了,如果你想了解更多关于C语言字符串替换:字符,字符串,字符数组详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
为什么在 C# 中添加两个 char 结果是 int 类型? 例如,当我这样做时: var pr = 'R' + 'G' + 'B' + 'Y' + 'P'; pr 变量变为 int 类型。我希望它是
下面的代码可以编译,但 char 类型的行为与 int 类型的行为不同。 特别是 cout ::ikIsX >() ::ikIsX >() ::ikIsX >() using names
我正在寻找一个正则表达式,它可以匹配长度为 1 个或多个字符但不匹配 500 的内容。这将在 Rails 路由文件中使用,特别是用于处理异常。 路线.rb match '/500', to: 'err
对于 C 编程作业,我正在尝试编写几个头文件来检查所谓的“X 编程语言”的语法。我最近才开始,正在编写第一个头文件。这是我编写的代码: #ifndef _DeclarationsChecker_h_
为什么扩展的 ascii 字符(â、é 等)被替换为 字符? 我附上了一张图片...但我正在使用 PHP 从 MySQL 中提取数据,其中一些位置有扩展字符...我使用的是 Arial 字体。 您可以
我有一个与 R 中的断线相关的简单问题。 我正在尝试粘贴,但在获取(字符/数字)之间的断线时遇到问题。请注意,这些值包含在向量中(V1=81,V2=55,V3=25)我已经尝试过这段代码: cat(p
如何将 ANSI 字符 (char) 转换为 Unicode 字符 (wchar_t),反之亦然? 是否有用于此目的的任何跨平台源代码? 最佳答案 是的,在 中你有mbstowcs()和 wcsto
函数 fromCharCode 不适用于国际 ANSI 字符。例如,对于 ID 为 192 到 223 的俄语 ANSI (cp-1251) 字符,它返回特殊字符。如何解决这个问题? 我认为,需要将A
如果不喜欢,我想隐藏 id,但不起作用 SELECT * FROM character, character_actor WHERE character.id NOT LIKE character_a
现在这个程序成功地反转了键盘输入的单词。但是我想在我反转它之前“保存”指针中的单词,所以我可以比较两者,反转的和“原始的”,并检查它们是否是回文。我还没有太多经验,可能会出现比我知道的更多的错误,但我
Memcpy 和 memcmp 函数可以接受指针变量吗? char *p; char* q; memcpy(p,q,10); //will this work? memcmp(p,q,10); //w
恐怕我对一个相当过饱和的主题的细节有疑问,我搜索了很多,但找不到一个明确的答案来解决这个特定的明显-imho-重要的问题: 使用UTF-8将byte[]转换为String时,每个字节(8bit)都变成
我有一个奇怪的问题。我需要从 stat 命令打印输出字符串。 我已经编写了获取一些信息的代码。 import glob import os for file in glob.glob('system1
我正在使用 Java 并具有其值如下所示的字符串, String data = "vale-cx"; data = data.replaceAll("\\-", "\\-\\"); 我正在替换其中的“
String urlParameters = "login=test&password=te&ff"; 我有一个String urlParams,& - 是密码的一部分,如何使其转义,从而不被识别为分
大家好,我只想从此字符串中提取第一个字母: String str = "使 徒 行 傳 16:31 ERV-ZH"; 我只想获取这些字符: 使 徒 行 傳 并且不包括 ERV-ZH 仅数
这个问题已经有答案了: Crash or "segmentation fault" when data is copied/scanned/read to an uninitialized point
所以, 我有一个字符**;它本质上是一个句子,带有指向该句子中每个单词的指针;即 'h''i''\0''w''o''r''l''d''\0''y''a''y''!''\0' 在这种情况下,我希望使用可
这个问题在这里已经有了答案: Using quotation marks inside quotation marks (12 个答案) 关闭 7 年前。 如何打印 " 字符? 我知道打印 % 符号
我是一名优秀的程序员,十分优秀!