字符串函数之间的转换,首先要先了解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 d73961a9c276213c1a9858ecaf334ddb
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]!='\0') { 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]!='\0') { des[i]=src[i]; i++; } des[i]='\0'; 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]!='\0')||(str2[i]!='\0')) { 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 98c455a79ddfebb79781bff588e7b37e
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 ] == '.' ) str[ ix ] = '_';
上面代码段的实现可用如下语句替代:
replace( str.begin(), str.end(), '.', '_' );
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#和.NET提供了强大的功能和高效的开发环境。1)C#是一种现代、面向对象的编程语言,结合了C 的强大和Java的简洁性。2).NET框架是一个用于构建和运行应用程序的平台,支持多种编程语言。3)C#中的类和对象是面向对象编程的核心,类定义数据和行为,对象是类的实例。4).NET的垃圾回收机制自动管理内存,简化开发者的工作。5)C#和.NET提供了强大的文件操作功能,支持同步和异步编程。6)常见错误可以通过调试器、日志记录和异常处理来解决。7)性能优化和最佳实践包括使用StringBuild

.NETFramework是一个跨语言、跨平台的开发平台,提供一致的编程模型和强大的运行时环境。1)它由CLR和FCL组成,CLR管理内存和线程,FCL提供预构建功能。2)使用示例包括读取文件和LINQ查询。3)常见错误涉及未处理异常和内存泄漏,需使用调试工具解决。4)性能优化可通过异步编程和缓存实现,保持代码可读性和可维护性是关键。

C#.NET保持持久吸引力的原因包括其出色的性能、丰富的生态系统、强大的社区支持和跨平台开发能力。1)性能表现优异,适用于企业级应用和游戏开发;2).NET框架提供了广泛的类库和工具,支持多种开发领域;3)拥有活跃的开发者社区和丰富的学习资源;4).NETCore实现了跨平台开发,扩展了应用场景。

C#.NET中的设计模式包括Singleton模式和依赖注入。1.Singleton模式确保类只有一个实例,适用于需要全局访问点的场景,但需注意线程安全和滥用问题。2.依赖注入通过注入依赖提高代码灵活性和可测试性,常用于构造函数注入,但需避免过度使用导致复杂度增加。

C#.NET在现代世界中广泛应用于游戏开发、金融服务、物联网和云计算等领域。1)在游戏开发中,通过Unity引擎使用C#进行编程。2)金融服务领域,C#.NET用于开发高性能的交易系统和数据分析工具。3)物联网和云计算方面,C#.NET通过Azure服务提供支持,开发设备控制逻辑和数据处理。

C#.NET开发者社区提供了丰富的资源和支持,包括:1.微软的官方文档,2.社区论坛如StackOverflow和Reddit,3.GitHub上的开源项目,这些资源帮助开发者从基础学习到高级应用,提升编程技能。

C#.NET的优势包括:1)语言特性,如异步编程简化了开发;2)性能与可靠性,通过JIT编译和垃圾回收机制提升效率;3)跨平台支持,.NETCore扩展了应用场景;4)实际应用广泛,从Web到桌面和游戏开发都有出色表现。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

禅工作室 13.0.1
功能强大的PHP集成开发环境

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具