c++中string和char*的类型转换

阅读数:198 评论数:0

跳转到新版页面

分类

C/C++

正文

一、string转char*

1、c_str()方法

string str="world";
const char* p = str.c_str();// 加const或等号右边用char*

2、data()方法

string str = "hello";
const char* p = str.data();

3、copy()方法

string str="qweqwe";
char data[30];
str.copy(data,3,0);// 0表示复制开始的位置,3代表复制的字符个数

二、char* 转string

string s;
char *p = "hello";
s = p;

三、string的常用方式

1、创建和初始化

#include <iostream>
#include <string>

int main() {
    std::string str1; // 默认构造函数,创建一个空字符串
    std::string str2("Hello, World!"); // 使用C字符串初始化
    std::string str3 = "Hello, C++!"; // 使用字符串字面量初始化
    std::string str4(str2); // 拷贝构造函数
    std::string str5(10, 'A'); // 创建一个包含10个'A'字符的字符串

    std::cout << "str1: " << str1 << std::endl;
    std::cout << "str2: " << str2 << std::endl;
    std::cout << "str3: " << str3 << std::endl;
    std::cout << "str4: " << str4 << std::endl;
    std::cout << "str5: " << str5 << std::endl;

    return 0;
}

2、访问和修改字符

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    
    // 访问字符串中的字符
    char firstChar = str[0];
    char lastChar = str.at(str.size() - 1);

    std::cout << "First character: " << firstChar << std::endl;
    std::cout << "Last character: " << lastChar << std::endl;

    // 修改字符串中的字符
    str[7] = 'C';
    str.at(8) = '+';

    std::cout << "Modified string: " << str << std::endl;

    return 0;
}

3、字符串的连接

#include <iostream>
#include <string>

int main() {
    std::string str1 = "Hello, ";
    std::string str2 = "World!";
    
    // 使用加号操作符连接字符串
    std::string str3 = str1 + str2;
    std::cout << "Concatenated string: " << str3 << std::endl;

    // 使用append函数连接字符串
    str1.append(str2);
    std::cout << "Appended string: " << str1 << std::endl;

    return 0;
}

4、查找和替换

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    
    // 查找子串
    std::size_t pos = str.find("World");
    if (pos != std::string::npos) {
        std::cout << "'World' found at position: " << pos << std::endl;
    } else {
        std::cout << "'World' not found" << std::endl;
    }

    // 提取子串
    std::string subStr = str.substr(7, 5);
    std::cout << "Substring: " << subStr << std::endl;

    // 替换子串
    str.replace(7, 5, "C++");
    std::cout << "Replaced string: " << str << std::endl;

    return 0;
}

5、字符串比较

#include <iostream>
#include <string>

int main() {
    std::string str1 = "Hello";
    std::string str2 = "World";
    std::string str3 = "Hello";

    // 使用比较操作符
    if (str1 == str3) {
        std::cout << "str1 is equal to str3" << std::endl;
    }
    if (str1 != str2) {
        std::cout << "str1 is not equal to str2" << std::endl;
    }

    // 使用compare函数
    if (str1.compare(str2) < 0) {
        std::cout << "str1 is less than str2" << std::endl;
    } else if (str1.compare(str2) > 0) {
        std::cout << "str1 is greater than str2" << std::endl;
    } else {
        std::cout << "str1 is equal to str2" << std::endl;
    }

    return 0;
}

6、字符串长度和清空

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    
    // 获取字符串长度
    std::cout << "Length: " << str.size() << std::endl;
    std::cout << "Length: " << str.length() << std::endl;

    // 检查字符串是否为空
    if (!str.empty()) {
        std::cout << "String is not empty" << std::endl;
    }

    // 清空字符串
    str.clear();
    if (str.empty()) {
        std::cout << "String is empty after clear" << std::endl;
    }

    return 0;
}

四、char字节操作

1、4字节转int

#include <iostream>
#include <cstdint>

// 枚举类型用于表示字节序
enum Endianness {
    LITTLE_ENDIAN,
    BIG_ENDIAN
};

// 检查系统的字节序
Endianness checkSystemEndianness() {
    uint32_t value = 0x1;
    char *bytePtr = reinterpret_cast<char*>(&value);
    return bytePtr[0] == 1 ? LITTLE_ENDIAN : BIG_ENDIAN;
}

// 将 char[4] 转换为 int 的函数
int charArrayToInt(const char buffer[4], Endianness endianness) {
    uint32_t value = 0;
    if (endianness == LITTLE_ENDIAN) {
        value = static_cast<uint8_t>(buffer[0]) |
                (static_cast<uint8_t>(buffer[1]) << 8) |
                (static_cast<uint8_t>(buffer[2]) << 16) |
                (static_cast<uint8_t>(buffer[3]) << 24);
    } else { // BIG_ENDIAN
        value = static_cast<uint8_t>(buffer[3]) |
                (static_cast<uint8_t>(buffer[2]) << 8) |
                (static_cast<uint8_t>(buffer[1]) << 16) |
                (static_cast<uint8_t>(buffer[0]) << 24);
    }
    return static_cast<int>(value);
}

int main() {
    // 示例字节数组
    char buffer[4] = {0x01, 0x02, 0x03, 0x04};

    // 检查系统字节序
    Endianness systemEndianness = checkSystemEndianness();
    std::cout << "系统字节序: " << (systemEndianness == LITTLE_ENDIAN ? "小端序" : "大端序") << std::endl;

    // 将 char[4] 转换为 int
    int value = charArrayToInt(buffer, systemEndianness);
    std::cout << "转换后的整数: " << value << std::endl;

    return 0;
}
  • 大端序(Big Endian):最高有效字节(Most Significant Byte, MSB)存储在最低地址。
  • 小端序(Little Endian):最低有效字节(Least Significant Byte, LSB)存储在最低地址。

 




相关推荐

第1章 认识对象 1.面向对象分析(object-oriented analysis,OOA)的主要任务是分析问题域中的对象、对象之间的关系,然后构造出该问题域的分析模型。分析模型必须简洁、明确地抽象

第一章 C++初步认识 C++对C的“增强”,表现在两个方面: (1)在原来面向过程的机制基础上,对C语言的功能做了不少扩展 (2)增加了面向对象的机制   面向对象和面向过程不是矛盾的,而是各有用途

有一种特殊的指针叫做成员指针,它们通常指向一个类的成员,而不是对象中成员的特定实例。 <span styl

C++标准每5年会有一个新版本,1998年的C++98、2003年的C++03、2007年的C++TR1、2011年的C++11. 转换操作符 static_cast 将一个值以符合逻辑的方式转型。这

组织和策略问题 第0条 不要拘泥于小节(了解哪此东本西不应该标准化) 编程规范不应施加个人喜好或者过时的做法。 第1条 在高警告级别干净利落地进行编译 高度重视警告:使用编译器的最高警告级别。应该要求

它的规则就是当编译器对无限定域的函数调用进行名字查找时,除了当前名字空间域以外,也会把<span style="colo

1、C++版本更迭 年份 C++标准 通用名 别名 标准编译选项 GNU扩展选项 1978 C with Classes - - - - 1998 ISO/IEC 14882:199

1、转换操作 (1)static_cast 将一个值以符合逻辑的方式转型。这个可以看作是“利用原值重建一个临时对象,并在设立初值时使用型别转换”。唯有当上述型别转换有所定义时,整个转换才会成功。 如:

一、概述 GCC一般包括预处理、编译、组装和链接。GCC的运行一般是调用命令gcc,在cross-compiling时使用machine-gcc或machine-gcc-version,在使用c++时

一、概念 所谓的预编译头文件就是把工程中不会经常改变的代码预先编译好放在一个文件里(通过是以.pch为扩展名Precompiled heade