服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++超详细讲解字符串类

C++超详细讲解字符串类

2022-12-14 12:26清风自在 流水潺潺 C/C++

在C++中只有一个字符串类,即basic_string,其管理着一个 '\0' 结尾的字符数组。头文件:#include ,string类支持两种输入方式:cin方式和getline()方式

一、历史遗留问题

  • C 语言不支持真正意义上的字符串
  • C 语言用字符数组和一组函数实现字符串操作
  • C 语言不支持自定义类型,因此无法获得字符串类型

 

二、解决方案

  • 从 C 到 C++ 的进化过程引入了自定义类型
  • 在 C++ 中可以通过类完成字符串类型的定义

 

三、标准库中的字符串类

C++ 语言直接支持 C 语言的所有概念

C++ 语言中没有原生的字符串类型

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

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

下面看一个字符串类的使用代码:

#include <iostream>
#include <string>
using namespace std;
void string_sort(string a[], int len)
{
  for (int i = 0; i < len; i++)
  {
      for (int j = i; j < len; j++)
      {
          if (a[i] > a[j])
          {
              swap(a[i], a[j]);
          }
      }
  }
}
string string_add(string a[], int len)
{
  string ret = "";
  for (int i = 0; i < len; i++)
  {
      ret += a[i] + ";";
  }
  return ret;
}
int main()
{
  string sa[7] = 
  {
      "Hello World",
      "AutumnZe",
      "C#",
      "Java",
      "C++",
      "Python",
      "TypeScript"
  };
   string_sort(sa, 7);
   for(int i = 0; i < 7; i++)
   {
      cout << sa[i] <<endl;
   }
   cout << endl;
   cout << string_add(sa, 7) << endl;
   return 0;
}

输出结果如下:

C++超详细讲解字符串类

  • 排序基于字典顺序进行。
  • 字符串类进行了大量的操作符重载,所以 a[i] > a[j] 以及ret += a[i] + ";"; 都是可以的。

字符串与数字的转换

标准库中提供了相关的类对字符串和数字进行转换

字符串流类 ( sstream ) 用于 string 的转换

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

使用方法:

string --> 数字

istringstream iss("123.45");
double num;
iss > > num;

数字 --> string

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

下面看一个字符串和数字转换的示例:

#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())
int main()
{
  double n = 0;
  if (TO_NUMBER("234.567", n))
  {
      cout << n << endl;
  }
  string s = TO_STRING(12345);
  cout << s << endl;
  return 0;
}

输出结果如下:

C++超详细讲解字符串类

C++ 中还可以通过模板技术进行字符串和数字转换,这里先用宏来实现。

 

四、字符串循环右移

示例 abcdefg 循环右移 3 位后得到 efgabcd

#include <iostream>
#include <string>
using namespace std;
string operator >> (const string& s, unsigned int n)
{
  string ret = "";
  unsigned int pos = 0;
  n = n % s.length();
  pos = s.length() - n;
  ret = s.substr(pos);
  ret += s.substr(0, pos);
  return ret;
}
int main()
{
  string s = "abcdefg";
  string r = (s >> 8);
  cout << r << endl;
  return 0;
}

输出结果如下:

C++超详细讲解字符串类

分析过程如下:

abcdefg ==> 8 等价于 abcdefg ==> 1 (因为 8 % 7 = 1)
7 - 1 =6
所以把 g 提出来
ret = g
然后 ret = g + abcdef
就是最终结果 gabcdef

 

五、小结

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

到此这篇关于C++超详细讲解字符串类的文章就介绍到这了,更多相关C++字符串类内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_43129713/article/details/124400005

延伸 · 阅读

精彩推荐
  • C/C++利用Matlab绘制一个可爱的南瓜灯

    利用Matlab绘制一个可爱的南瓜灯

    这篇文章主要为大家介绍了如何利用Matlab绘制一个可爱的南瓜灯!文中的示例代码讲解详细,对我们学习Matlab有一定帮助,需要的可以参考一下...

    slandarer8522022-10-08
  • C/C++C++ 中快排的递归和非递归实现

    C++ 中快排的递归和非递归实现

    这篇文章主要介绍了C++ 中快排的递归和非递归实现的相关资料,需要的朋友可以参考下...

    jamesjxin10952021-05-17
  • C/C++C++实现学校运动会管理系统

    C++实现学校运动会管理系统

    这篇文章主要为大家详细介绍了C++实现学校运动会管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    自动2121马飞跃7302021-07-02
  • C/C++C和指针小结(推荐)

    C和指针小结(推荐)

    下面小编就为大家带来一篇C和指针小结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考,一起跟随小编过来看看吧...

    C语言教程网5012021-04-06
  • C/C++c++静态局部变量和静态函数示例

    c++静态局部变量和静态函数示例

    这篇文章主要介绍了c++静态局部变量和静态函数示例,需要的朋友可以参考下...

    C++教程网9792021-01-19
  • C/C++使用C语言求解扑克牌的顺子及n个骰子的点数问题

    使用C语言求解扑克牌的顺子及n个骰子的点数问题

    这篇文章主要介绍了使用C语言求解扑克牌的顺子及n个骰子的点数问题的方法,解答实例主要为了突出解题的算法,需要的朋友可以参考下...

    wuzhekai19855132021-03-28
  • C/C++C语言经典算法例题求100-999之间的“水仙花数”

    C语言经典算法例题求100-999之间的“水仙花数”

    本文的主要内容,设计一个程序,找出100-999之间的“水仙花数”,需要的朋友可以参考下...

    ycz199304239302021-03-04
  • C/C++用C语言完整实现2048游戏

    用C语言完整实现2048游戏

    2048是一款数字益智游戏,初始数字则是由2+2组成的基数4。在操作方面的不同则表现为一步一格的移动,变成更为爽快的一次到底。相同数字的方况在靠拢...

    愿百事可乐7052022-02-28