目录
1. C 风格字符串
1.1 不调用库函数,实现C风格字符串的常用基本函数
2.string 类类型
2.1 对字符串类的基本操作:
2.2 C 风格的字符串与 string 对象的转换
首页 后端开发 C#.Net教程 c/c++字符串函数是什么类型和它是如何转换的?举例说明

c/c++字符串函数是什么类型和它是如何转换的?举例说明

Jul 24, 2018 pm 02:38 PM

字符串函数之间的转换,首先要先了解C++字符串的组成,C++提供了两种字符串的表示:C 风格的字符串和标准 C++引入的 string 类类型。

1. C 风格字符串

C 风格的字符串起源于 C 语言 并在 C++中继续得到支持。字符串被存储在一个字符数组中 一般通过一个 char*类型的指针来操纵它 。

标准 C 库为操纵 C 风格的字符串提供了一组函数,例如:

int strlen( const char* ); // 返回字符串的长度

int strcmp( const char*, const char* ); // 比较两个字符串是否相等

char* strcpy(char*, const char* ); // 把第二个字符串拷贝到第一个字符串中

标准 C 库作为标准的 C++的一部分被包含在其中。为使用这些函数,我们必须包含相关的 C 头文件#include

1.1 不调用库函数,实现C风格字符串的常用基本函数

#include<iostream>
#include<cstring>
#include<cassert>
using namespace std;
/*返回字符串长度*/
int MyStrlen(const char * ch)
{
	assert(ch!=NULL);
	int i=0,count=0;
	const char *t=ch;	//用一个临时指针去遍历,防止改变原来指针指向。
	while(t[i]!=&#39;\0&#39;)
	{
		count++;
		i++;
	}
	return count;
}

/*把第二个字符串拷贝到第一个字符串中,返回第一个字符串的首部指针。*/
char* MyStrcpy(char *des,const char *src)
{
	assert((des!=NULL)&&(src!=NULL));
	int i=0;
	char *add=des;	//用add记录des的首部。
	while(src[i]!=&#39;\0&#39;)
	{
		des[i]=src[i];
		i++;
	}
	des[i]=&#39;\0&#39;;
	return add;
}

/*
比较两个字符串是否相等。
相等则返回0,前一个字符串比后一个小则返回-1,否则返回1。
*/
int MyStrcmp(const char *ch1,const char *ch2)
{
	assert((ch1!=NULL)&&(ch2!=NULL));
	int i=0;
	const char *str1=ch1;	//定义两个临时指针。
	const char *str2=ch2;
	while((str1[i]!=&#39;\0&#39;)||(str2[i]!=&#39;\0&#39;))
	{
		if(str1[i]<str2[i])
		{
			return -1;
		}
		else if(str1[i]>str2[i])
		{
			return 1;
		}
		else
		{
			i++;
		}
	}
	return 0;
}
int main()
{
	char ch[]="cavely";
	char ch2[]="julia";
	cout<<MyStrlen(ch)<<endl;	//6
	cout<<MyStrcmp(ch,ch2)<<endl;	//-1
	/*
	下面这两句不能写成:
	char ch3[100];
	ch3=MyStrcpy(ch,ch2);	//数组名是一个地址【常量】。不能被赋值
	*/
	char *ch3;
	ch3=MyStrcpy(ch,ch2);
	cout<<ch3<<endl;	//julia
	return 0;
}
登录后复制

2.string 类类型

要使用 string 类型 必须先包含相关的头文件#include

string str("hello"); //①定义一个带初值的字符串

string str2; // ②定义空字符串

string str3( str ); //③用一个 string 对象来初始化另一个 string 对象

2.1 对字符串类的基本操作:

(1)str的长度由 size()操作返回(不包含终止空字符),例如str.size()的值为5。

(2)使用 empty()操作判断字符串是否为空,例如:str2.empty()。如果字符串中不含有字符,则 empty()返回布尔常量 true ,否则返回 false。

(3)还可以直接使用赋值操作符 = 拷贝字符串,例如:st2 = st3; // 把 st3 拷贝到 st2 中

(4)可以使用加操作符 + 或看起来有点怪异的复合赋值操作符 += 将两个或多个字符串连接起来。例如,给出两个字符串

string s1( "hello, " );

string s2( "world\n" );

我们可以按如下方式将两个字符串连接起来形成第三个字符串

string s3 = s1 + s2;

如果希望直接将 s2 附加在 s1 后面 那么可使用 += 操作符

s1 += s2;

(5)string 类型支持通过下标操作符访问单个字符,例如,在下面的代码段中,字符串中的所有句号被下划线代替。

string str( "fa.disney.com" );
int size = str.size();
for ( int ix = 0; ix < size; ++ix )
if ( str[ ix ] == &#39;.&#39; )
    str[ ix ] = &#39;_&#39;;
登录后复制

上面代码段的实现可用如下语句替代:

replace( str.begin(), str.end(), &#39;.&#39;, &#39;_&#39; );
登录后复制

replace()是泛型算法中的一个,begin()和 end()操作返回指向 string 开始和结束处的迭代器(iterator) 。迭代器是指针的类抽象 ,由标准库提供。replace()扫描 begin()和 end()之间的字符。每个等于句号的字符,都被替换成下划线。

 

2.2 C 风格的字符串与 string 对象的转换

string 类型能够自动将 C 风格的字符串转换成 string 对象。例如,这使我们可以将一个 C 风格的字符串赋给一个 string 对象。

string s1;

const char *pc = "a character array";

s1 = pc; //OK

但是,反向的转换不能自动执行。对隐式地将 string 对象转换成 C 风格的字符串 string类型没有提供支持。例如下面,试图用 s1 初始化 str 就会在编译时刻失败。

char *str = s1; // 编译时刻类型错误

为实现这种转换,必须显式地调用名为 c_str()的操作。名字 c_str()代表了 string 类型与 C 风格字符串两种表示法之间的关系。字面意思是,给我一个 C 风格的字符串表示——即 指向字符数组起始处的字符指针。为了防止字符数组被程序直接处理, c_str()返回了一个指向常量数组的指针 const char*

所以,正确的初始化应该是:const char *str = s1.c_str(); // OK

相关推荐:

从C/C++迁移到PHP判断字符类型的函数

从C/C++迁移到PHP——判断字符类型的函数_php基础

视频:C++ 手册教程-在线手册教程

C++ 教程 | C++ 手册教程 

以上是c/c++字符串函数是什么类型和它是如何转换的?举例说明的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1672
14
CakePHP 教程
1428
52
Laravel 教程
1332
25
PHP教程
1277
29
C# 教程
1256
24
c#.net的持续相关性:查看当前用法 c#.net的持续相关性:查看当前用法 Apr 16, 2025 am 12:07 AM

C#.NET依然重要,因为它提供了强大的工具和库,支持多种应用开发。1)C#结合.NET框架,使开发高效便捷。2)C#的类型安全和垃圾回收机制增强了其优势。3).NET提供跨平台运行环境和丰富的API,提升了开发灵活性。

从网络到桌面:C#.NET的多功能性 从网络到桌面:C#.NET的多功能性 Apr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C#作为多功能.NET语言:应用程序和示例 C#作为多功能.NET语言:应用程序和示例 Apr 26, 2025 am 12:26 AM

C#在企业级应用、游戏开发、移动应用和Web开发中均有广泛应用。1)在企业级应用中,C#常用于ASP.NETCore开发WebAPI。2)在游戏开发中,C#与Unity引擎结合,实现角色控制等功能。3)C#支持多态性和异步编程,提高代码灵活性和应用性能。

将C#.NET应用程序部署到Azure/AWS:逐步指南 将C#.NET应用程序部署到Azure/AWS:逐步指南 Apr 23, 2025 am 12:06 AM

如何将C#.NET应用部署到Azure或AWS?答案是使用AzureAppService和AWSElasticBeanstalk。1.在Azure上,使用AzureAppService和AzurePipelines自动化部署。2.在AWS上,使用AmazonElasticBeanstalk和AWSLambda实现部署和无服务器计算。

C#和.NET运行时:它们如何一起工作 C#和.NET运行时:它们如何一起工作 Apr 19, 2025 am 12:04 AM

C#和.NET运行时紧密合作,赋予开发者高效、强大且跨平台的开发能力。1)C#是一种类型安全且面向对象的编程语言,旨在与.NET框架无缝集成。2).NET运行时管理C#代码的执行,提供垃圾回收、类型安全等服务,确保高效和跨平台运行。

C#.NET开发:入门的初学者指南 C#.NET开发:入门的初学者指南 Apr 18, 2025 am 12:17 AM

要开始C#.NET开发,你需要:1.了解C#的基础知识和.NET框架的核心概念;2.掌握变量、数据类型、控制结构、函数和类的基本概念;3.学习C#的高级特性,如LINQ和异步编程;4.熟悉常见错误的调试技巧和性能优化方法。通过这些步骤,你可以逐步深入C#.NET的世界,并编写高效的应用程序。

c#和.net:了解两者之间的关系 c#和.net:了解两者之间的关系 Apr 17, 2025 am 12:07 AM

C#和.NET的关系是密不可分的,但它们不是一回事。C#是一门编程语言,而.NET是一个开发平台。C#用于编写代码,编译成.NET的中间语言(IL),由.NET运行时(CLR)执行。

C#.NET:使用.NET生态系统构建应用程序 C#.NET:使用.NET生态系统构建应用程序 Apr 27, 2025 am 12:12 AM

如何利用.NET构建应用?使用.NET构建应用可以通过以下步骤实现:1)了解.NET基础知识,包括C#语言和跨平台开发支持;2)学习核心概念,如.NET生态系统的组件和工作原理;3)掌握基本和高级用法,从简单控制台应用到复杂的WebAPI和数据库操作;4)熟悉常见错误与调试技巧,如配置和数据库连接问题;5)应用性能优化与最佳实践,如异步编程和缓存。

See all articles