在C语言中学习字符串时,我们使用的是字符数组的概念。

C语言中没有真正意义的字符串。为了表达字符串的概念,我们使用了字符数组来模拟字符串。

在应用程序开发中,我们需要大量的处理字符串,如果还用C语言中的方式,效率就显得太低了。

C++中也没有原生的字符串数据类型,C++中为了兼容C,也不支持字符串类型,也是用字符数组和一组函数的方式来实现字符串的操作。

不一样的是C++中支持自定义类型。

解决方案:

C++原生系统类型不支持字符串。我们完全可以用自定义类型来实现一个字符串。

标准库中的字符串类:

字符串类的使用:

 #include <iostream>
#include <string> using namespace std; void string_sort(string a[], int len)
{
for(int i=; 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=; i<len; i++)
{
ret += a[i] + "; ";
} return ret;
} int main()
{
string sa[] =
{
"Hello World",
"D.T.Software",
"C#",
"Java",
"C++",
"Python",
"TypeScript"
}; string_sort(sa, ); for(int i=; i<; i++)
{
cout << sa[i] << endl;
} cout << endl; cout << string_add(sa, ) << endl; return ;
}

运行结果如下:

这个程序我们是使用字符串类来完成的,用到了两个字符串类的大小比较和字符串类的相加。

在C++中我们没有必要在使用字符数组来表示字符串了,直接使用标准库中的string类型即可。

字符串与数字的转换:

sstream类的诞生就是为了支持字符串到类的转换。

使用方法:

实验程序:

结果如下:

第12行的程序是有返回值的,改进如下:

abcdefg转换不会成功,因此,14行不会执行,如下:

18行还可以写成如下的形式:

工程中我们还要再进行一次封装:

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

运行结果如下:

面试题分析:

程序与结果:

既然是C++,我们通过重载右移操作符的方式再实现一次,如下:

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

运行结果和上面一样。

字符串反转:

小结:

第33课 C++中的字符串类的更多相关文章

  1. 第11课 Qt中的字符串类

    1. 历史遗留问题和解决方案 (1)历史遗留问题 ①C语言不支持真正意义上的字符串 ②C语言用字符数组和一组函数实现字符串操作 ③C语言不支持自定义类型,因此无法获得字符串类型 (2)解决方案 ①从C ...

  2. 第 33课 C++中的字符串(上)

    历史的遗留问题在C语言中没有真正意义上的字符串,为了表达字符串这个概念利用字符数组来模拟字符串.C语言不支持真正意义上的字符串 (C++也不支持)C语言用字符数组和一组函数实现字符串操作 (C++中同 ...

  3. 第33课 C++中的字符串

    1. 历史遗留问题及解决方案 (1)历史遗留问题 ①C语言不支持真正意义上的字符串------c语言是用字符数组实现字符串 ②C语言用字符数组和一组函数模拟字符串操作 ③C语言不支持自定义类型,因此无 ...

  4. 第 33课 C++中的字符串(下)

    字符串与数字转换-标准库中提供了相关的类对字符串和数字进行转换-字符串流类(sstream)用于string的转换.<sstream>-相关头文件.istringstream-字符串输入流 ...

  5. C++中的字符串类

    1,本文分析 C++ 中的字符串,C 语言中的字符串利用的是 C 语言中的字符数组,  在 C 语言中没有真正意义上的字符串,利用了字符数组表示了字符串,最初设  计 C 语言仅仅是为了开发 Unix ...

  6. Qt学习之路(2)------Qt中的字符串类

    QString QString的一些基本用法 basic.cpp #include <QTextStream> int main(void) { QTextStream out(stdou ...

  7. Qt 中QString 字符串操作:连接、组合、替换、去掉空白字符

    Qt中的字符串类 QString类 保存了16位Unicode值,提供了丰富的操作.查询和转换等函数. QString 字符串有如下几个操作符: (1) "+" 用于组合两个字符串 ...

  8. C++解析(18):C++标准库与字符串类

    0.目录 1.C++标准库 2.字符串类 3.数组操作符的重载 4.小结 1.C++标准库 有趣的重载--操作符 << 的原生意义是按位左移,例:1 << 2;,其意义是将整数 ...

  9. C++ 标准库字符串类使用

    标准库中的字符串类 C++语言直接支持C语言所有概念. C++中没有原生的字符串类型. 由于C++中没有原生的字符串类型,C++标准库提供了string类型. 1.string 直接支持字符串链接 2 ...

随机推荐

  1. python 命令行升级pip

    import os import sys path = '"'+os.path.dirname(sys.executable)+'\\scripts\\pip" install - ...

  2. gpg: no valid OpenPGP data found. 解决办法

    在Ubuntu14.04 server(amd64)上面安装ros,运行命令 wget http://packages.ros.org/ros.key -O - | sudo apt-key add ...

  3. ros 录制

    rosbag record cd ~/bagfiles # 存放.bag数据的路径 1. 录制所有 topic rosbag record -a # 录制所有topic 2. 录制指定的 topic ...

  4. npm 安装文件 运行报错 %1 is not a valid Win32 application

    安装了那个模板出了错报这样的错误 “%1 is not a valid Win32 application” 你就除那个模板新安装. 如下例: 运行 npm install -g @angular/c ...

  5. unity中实现静态的3D对象对其他对象的跟随

    using UnityEngine; public class FollowPosition : MonoBehaviour { public Transform targetTrans; publi ...

  6. 你的centos/linux下有多个php.ini,不确定是哪个时

    你的centos/linux下有多个php.ini,不确定是哪个时,但是你自己知道,你的php安装目录. 比如我的php安装目录是 /usr/local/php 那么可以通过命令来查找php.ini的 ...

  7. 16 Managing Undo

    16 Managing Undo 从Oracle11g开始,在默认安装中oracle会自动管理undo, 典型安装中不需要DBA介入配置,然而,如果选择了flash back特性,你就需要进行一些un ...

  8. codeforces 1041d// Glider// Codeforces Round #509(Div. 2)

    题意:给出,n和飞行员高度h,n是区间数.在区间里飞行员高度不变,其它地方每秒高度-1,x坐标+1.问在高度变为0以前,x坐标最多加多少? 用数组gap记录本区间右端到下一个区间左端的距离.用sum记 ...

  9. jenkins X 和k8s CI/CD

    架构 二.核心组件 1.包管理工具     1.1.helm工具包    https://github.com/helm/helm      1.2.Chartmuseum开源helm chart仓库 ...

  10. Oracle11g温习-第四章:手工建库

     1.create database plan 1.库类型:   OLTP :  在线事务处理系统   OLAP : 在线应用处理系统   DSS :    数据决策系统 2.数据库名字及字符集 3. ...