第33课 C++ 中的字符串类

本文内容来自于对狄泰学院 唐佐林老师 C++深度解析 课程的学习总结

标准库中的字符串类

C++ 语言 直接支持 C 语言的所有概念
C++ 语言中 没有原生的字符串类型

C++ 标准库提供了 string 类型

string 直接支持 字符串连接
string 直接支持 字符串的大小比较
string 直接支持 子串查找和提取
string 直接支持 字符串的插入和替换

字符串 数字 的转换

  • 标准库中提供了相关的类对字符串和数字进行转换
  • 字符串流类(sstream)用于 string 的转换

sstream - 相关头文件
istringstream - 字符串输入流
ostringstream - 字符串输出流

使用方法

string -> 数字

istringstream iss(“123.45”);
double num;
iss >> num;

数字 -> string

ostringstream oss;
oss << 543.21;
string s = oss.str();

实验程序

使用字符串流类sstream实现字符串和数字之间的转换

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

#define TO_NUMBER(s, n) (istringstream(s) >> n)
#define TO_STRING(n) (((ostringstream&)(ostringstream() << n)).str())


void to_number(string s, int& num)
{
    istringstream iss(s);
    iss >> num;
}

string to_string(int num)
{
    ostringstream oss;
    oss << num;
    return oss.str();
}


int main()
{
    int num_tmp = 0;

    to_number("123", num_tmp);
    cout << num_tmp << endl;

    string s = to_string(100);
    cout << s << endl;

    TO_NUMBER("456", num_tmp);
    cout << num_tmp << endl;

    s = TO_STRING(200);
    cout << s << endl;

    double d_tmp = 0.0;
    TO_NUMBER("123.456", d_tmp);
    cout << d_tmp << endl;

    s = TO_STRING(123.456);
    cout << s << endl;


    return 0;
}

运行结果
在这里插入图片描述

实验结果:void to_number(string s, int& num) 完成了字符串向整形数转换
                  string to_string(int num) 完成了整形数向字符串的转换
                  TO_NUMBER 宏完成了字符串向任意类型数值的转换
                  TO_STRING 宏完成了任意类型数值向字符串的转换




面试题分析

编写代码实现:字符串循环右移,如:“abcdefg” 循环右移 3 位得到 “efgabcd”

关于 string 类中的两个成员函数
length: 用于获取字符串的长度
substr(startpos): 从 startpos 位置开始截取字符串
substr(startpos, length): 从 startpos位置开始截取 length 长度的字符串

实验代码

#include <iostream>
#include <sstream>
#include <string>

using namespace std;


string chr_right_move(string s, int n)
{
    int len = s.length();
    int pos = n % len;

    string tmp = s.substr(pos);
    tmp += s.substr(0, pos);

    return tmp;
}

string operator >> (string s, int n)
{
    int len = s.length();
    int pos = n % len;

    string tmp = s.substr(pos);
    tmp += s.substr(0, pos);

    return tmp;
}


int main()
{
    string s = chr_right_move("helloworld", 3);

    cout << s << endl;

    string s1 = "abcdefghijk";
    s1 = s1 >> 4;

    cout << s1 << endl;

    return 0;
}

运行结果
在这里插入图片描述

实验结果:chr_right_move 函数实现了将字符串右移的功能,同样重载 >> 操作符函数也同样实现了字符串右移功能,使用更方便。




小结

应用开发中 大多数的情况 都在进行 字符串处理
C++ 中 没有直接支持 原生的字符串类型
标准库中通过 string 类支持字符串的概念
string 类支持 字符串 数字 的相互转换
string 类的应用 使得问题的求解变得简单

发布了42 篇原创文章 · 获赞 0 · 访问量 971

猜你喜欢

转载自blog.csdn.net/lzg2011/article/details/104441894