字符串与数字转换
-标准库中提供了相关的类对字符串和数字进行转换
-字符串流类(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. C++中的异常处理(下)

    array.h #ifndef _ARRAY_H_ #define _ARRAY_H_ #include <stdexcept> using namespace std; template ...

  2. Mybatis环境搭建(二)

    1. 创建Maven Project,选择war,修改pom.xml <properties> <!-- JDK版本 --> <java.version>1.8&l ...

  3. 剑指Offer-16.合并两个排序的链表(C++/Java)

    题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 分析: 可以用一个新的节点,来去比较两个单调递增的链表当前节点的值,如果p1当前的值小于p2,则新 ...

  4. layui实现分页

    一 准备工作 首先必须先引入layui的完整目录,也就是你下载下来的整个layui的目录都要放在你的资源文件夹下,也就是这个文件目录 刚开始接触layui的时候,以为和jquery,vue等框架一样, ...

  5. oracle用户管理, 授权与回收权限

    一. 用户管理参数, 0.删除用户: drop user 用户名 [cascade] 当我们删除用户时, 如改用户已创建过数据对象, 那么删除用户时必须加cascade参数, 用来同步删除 改用户的所 ...

  6. 1+X证书Web前端开发规范手册

    一.规范目的 1.1 概述 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进行前台页面开发. 本 ...

  7. 【shell脚本】定时备份日志===logBackup.sh

    定时备份日志 设置执行权限 [root@VM_0_10_centos shellScript]# chmod a+x logBackup,sh 脚本内容 [root@VM_0_10_centos sh ...

  8. 移动端rem布局,用户调整手机字体大小或浏览器字体大小后导致页面布局出错问题

    一.用户修改手机字体设置大小,影响App里打开的web页面. 手机字体设置大小,影响App的页面.Android的可以通过webview配置webview.getSettings().setTextZ ...

  9. spring的一些概念及优点

    Spring是一个轻量级的DI和AOP容器框架.说它轻量级有一大部分原因是相对于EJB的(虽然本人从来没有接触过EJB的应用),但重要的是Spring是非侵入式的,基于Spring开发应用一般不依赖于 ...

  10. Codekicker.BBCode(BBCode 和 HTML 互转的插件)介绍

    项目地址:http://bbcode.codeplex.com/ 项目介绍: Codekicker.BBCode is a stable and performant BBCode-Parser fo ...