IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> [PAT]C++中string、char *、char[]的转换 -> 正文阅读

[C++知识库][PAT]C++中string、char *、char[]的转换

一、摘要

在算法竞赛题目和平时的编程中经常会遇到处理字符串的问题,常用的方法是使用string类处理字符串。但是在一些C语言版本的函数中智能处理char类型的字符串,因此掌握string与char类型数据转换会提供很大的便利。本文第二部分简要介绍了C++中stringchar*char[]之间的转换代码,另外还介绍了char字符类型与前三者的转换代码。

二、string、char*和char[] 之间的转换

1. string 转为 char*

#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int main(int, char**) {
    string str = "Hello World";
    char* s1 = nullptr;
    char* s2 = nullptr;
    const char* s3;
    s1 = new char[str.length() + 1];
    s2 = new char[str.length() + 1];
    strcpy(s1, str.c_str());
    strcpy(s2, str.data());
    s3 = str.c_str();
    cout << s1 << endl;
    cout << s2 << endl;
    cout << s3 << endl;
    return 0;
}

输出结果:

Hello World
Hello World
Hello World

需要注意的是:

  • s3const char*类型,因此无法通过类似s3[0]='x'的代码修改原始的str
  • 如果想要通过char* s4达到修改原始str的效果,可以如下代码达到该目的:
char* s4 = &str[0];
s4[0] = 'x';
  • str.c_str()str.data()函数功能完全相同,都是返回一个const char*

2. char* 转为 string

代码:

#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int main(int, char**) {
    char* s = "Hello World";
    string str1 = s;
    string str2(s);
    string str3 = string(s);
    cout << str1 << endl;
    cout << str2 << endl;
    cout << str3 << endl;
    return 0;
}

输出:

Hello World
Hello World
Hello World

3. string 转为char[]

在将string str转为char s[]时需要保证s[]的空间大小大于str的大小+1,因为在s[]中在字符串在最后需要使用\0作为字符串的结束符号。
代码:

#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int main(int, char**) {
    string str = "Hello World";
    char s1[str.length() + 1];
    char s2[str.length() + 1];
    strcpy(s1, str.c_str());
    strcpy(s2, str.data());
    cout << s1 << endl;
    cout << s2 << endl;
    return 0;
}

输出结果:

Hello World
Hello World

4. char[]转为string

char s1[]char* s2类似,因为在C语言的数组中,数组名称即为数组的首地址,而地址又可以使用指针表示,因此可以认为char s1[]cahr* s2等价。
代码:

#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int main(int, char**) {
    char s[12] = "Hello World";
    string str1 = s;
    string str2(s);
    string str3 = string(s);
    cout << str1 << endl;
    cout << str2 << endl;
    cout << str3 << endl;
    return 0;
}

输出结果:

Hello World
Hello World
Hello World

三、参考

[1]. C++中string、char *、char[]的转换

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:19:43  更:2021-09-04 17:21:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:13:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码