字符串与数字转换
-标准库中提供了相关的类对字符串和数字进行转换
-字符串流类(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 <string>
#include <sstream>
using namespace std; int main()
{
istringstream iss("123.45");
double num;
//iss >> num; //重载 >> 有返回值,返回值是一个bool类型
if(iss >> num)
{
cout << num <<endl;
} ostringstream oss;
//oss << 543.21; //这个地方也有返回值,返回值就是oss对象本身。如何证明呢?
oss << << '.' << ;
string s = oss.str();
cout << s <<endl; return ;
}
#include <iostream>
#include <string>
#include <sstream>
using namespace std; //这个程序不够完美,为什么?因为函数的参数为double类型,那么int类型的呢?需要将这个函数再写一遍吗,这样可以,但是就是
//在造轮子。目前我们还无法使用更高级的用法,比如说模板技术。但是在这里可以通过使用C语言中的宏实现。 #if 1
#define TO_NUMBER(s,n) (istringstream(s) >> n) //这个地方就是利用前面学过的调用构造函数产生临时对象,临时对象的生命周期只在这一条语句中。
#define TO_STRING(n) (((ostringstream&)(ostringstream() << n)).str())
#else
bool to_number(const string& s, double &n)
{
istringstream ss(s); return ss >> n;
} string to_string(double n)
{
return ((ostringstream&)(ostringstream() << n)).str();
}
#endif
int main()
{
double n;
if(TO_NUMBER("123.45",n))
{
cout << n <<endl;
} string s = TO_STRING(2.1345);
cout << s <<endl; return ;
}

字符串右移
-示例:
.  abcdefg循环右移3位后得到efgabcd

#include <iostream>
#include <string> using namespace std; string right_func(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 = right_func(s,); cout << r << 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. 第33课 C++中的字符串类

    在C语言中学习字符串时,我们使用的是字符数组的概念. C语言中没有真正意义的字符串.为了表达字符串的概念,我们使用了字符数组来模拟字符串. 在应用程序开发中,我们需要大量的处理字符串,如果还用C语言中 ...

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

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

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

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

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

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

  5. Springboot 之 自定义配置文件及读取配置文件注意:配置文件中的字符串不要有下划线 .配置中 key不能带下划线,value可以(下划线的坑,坑了我两天..特此纪念)

    注意:配置文件中的字符串不要有下划线 .配置中  key不能带下划线,value可以 错误的.不能读取的例子: mySet .ABAP_AS_POOLED      =  ABAP_AS_WITH_P ...

  6. SQL点滴33—SQL中的字符串操作

    原文:SQL点滴33-SQL中的字符串操作 计算字符串长度len()用来计算字符串的长度 select sname ,len(sname) from student 字符串转换为大.小写lower() ...

  7. json字符串中key值下划线命名转换为驼峰命名

    json字符串中key值下划线命名转换为驼峰命名: 例如: 原json串: String json= "{'user_name':'ok','user_sex':0,'object_info ...

  8. 第18课 - make 中的路径搜索(下)

    第18课 - make 中的路径搜索(下) 1. 问题一 当 VPATH 和 vpath 同时出现,make 会如何处理? 工程项目的目录结构如下图所示,src1 和 src2 中都包含了 func. ...

  9. [Spark内核] 第33课:Spark Executor内幕彻底解密:Executor工作原理图、ExecutorBackend注册源码解密、Executor实例化内幕、Executor具体工作内幕

    本課主題 Spark Executor 工作原理图 ExecutorBackend 注册源码鉴赏和 Executor 实例化内幕 Executor 具体是如何工作的 [引言部份:你希望读者看完这篇博客 ...

随机推荐

  1. sudo apt-get 与 yum 常用命令

    yum -RedHat:CentOS... -xxx.rpmsudo apt-get  -Debian:Ubuntu...   -xxx.deb 安装工具rpm -ivh yum-2.0.4-1.rh ...

  2. <Binary Search> 81 (高频)34 (很难hard, 高频)315 (hard)354

    81. Search in Rotated Sorted Array II 如果中间的数小于最右边的数,则右半段是有序的,若中间数大于最右边数,则左半段是有序的.而如果可以有重复值,就会出现来面两种情 ...

  3. vscode (1.41.0版本,1.41.1版本)node_modules部分TS声明文件@types包会导致该版本没JS语法提示

    正常提示如下: 然而我的提示没了,本以为是插件问题,把所有插件禁用不行!卸载重装vscode还是不行!!但是其他电脑的1.41.1版本,同样代码确没问题!!!简直日了*了 折腾大半天,发下问题如下: ...

  4. python统计wav文件的时长

    import wave import os.path # 音频存放文件夹绝对路径 filedir = '/Users/111/PycharmProjects/TextClassify/wav' lis ...

  5. Linux网络编程基础API

    第5章 Linux网络编程基础API 探讨Linux网络编程基础API与内核中TCP/IP协议族之间的关系,并未后续章节提供编程基础.从3个方面讨论Linux网络API. socket地址API.so ...

  6. LeetCode 231.2的幂

    LeetCode 231.2的幂 题目: 给定一个整数,编写一个函数来判断它是否是 2 的幂次方. 算法: 若一个数是2的幂次的话定会有n & (n - 1) == 0这个关系成立 所以直接用 ...

  7. consul实现kubernetes-1.15集群master的高可用访问实现

    1.准备consul环境,参考我之前的博客实现或参考consul的官网部署最新的consul. 2.本次测试使用的是kubernetes-1.15.0 3.初始化集群 1)准备初始化文件 contro ...

  8. Knative 初体验:CICD 极速入门

    Knative 社区很早就在讨论用 Tekton 替换 Build 模块的相关事宜.Knative Build 官方已经正式说明不再建议使用 Knative Build 了. 如果你知道 Knativ ...

  9. LeetCode 1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold

    题目 我是按照边进行二分的 class Solution { public: int sum[100005]; int a[305][305]; int maxSideLength(vector< ...

  10. 来迟了,用Python助你叠猫猫,抢618大红包!

    目录: 0 引言 1 环境 2 需求分析 3 前置准备 4 逛店铺流程回顾 5 代码全景展示 6 总结 0 引言 最近叠猫猫的活动可真是十分的火爆,每天小伙伴们为了合猫猫忙的可谓是如火如荼.为啥要叠猫 ...