4.std::string中库函数的使用。
为了美观,我们把输入和输出设计成如下:

#include <iostream>
#include <string> int main()
{ std::string name;
std::string s3,s2;
std::cout << "Please enter your first name: ";
std::cin >> name;
s3 = "* Hello, " + name + "! *" ;
std::string s1(s3.size(), '*');
std::string spaces(s3.size() - , ' ');
s2 = "*" + spaces + "*";
std::cout << s1 << std::endl;
std::cout << s2 << std::endl;
std::cout << s3 << std::endl;
std::cout << s2 << std::endl;
std::cout << s1 << std::endl;
system("pause");
return ;
}
这里运用到的方法:
1.string的构造函数 string(int size, char ch)。指定字符串的长度,字符串中所有字符设置为ch。
2.string::size()函数返回字符串的长度,不包含'\0'。
3.string类中重载了 + 号。 直接 "something" + string 返回string类型。
课后习题:
1)下面的声明有效吗?
const std::string hello = "Hello";
const std::string message = hello + ", world" + "!";
有效。
2)下面的程序正确吗?
#include <iostream>
#include <string> int main()
{
{ const std::string s = "a string";
std::cout << s << std::endl; } { const std::string s = "another string";
std::cout << s << std::endl; }
return ;
}
正确。 {}里面声明的变量,范围就是声明它的{}。所以可以在两个不同的{}{}中声明名称一样的变量。
3)下面的程序输出正确吗?
#include <iostream>
#include <string> int main()
{
{ const std::string s = "a string";
std::cout << s << std::endl;
{ const std::string s = "another string";
std::cout << s << std::endl; }}
return ;
}
正确。输出和上一个程序一样。不同的是。在第二个{}里面。声明的s变量,覆盖了外部声明的s变量。
把倒数第三行的}}改成};}程序输出正确吗?
#include <iostream>
#include <string> int main()
{ { const std::string s = "a string";
std::cout << s << std::endl;
{ const std::string s = "another string";
std::cout << s << std::endl; };} system("pause");
return ;
}
正确。和上一个例子不同的在于,第一个{}里面多了一个;的空白语句。
4)下面的程序正确吗?
#include <iostream>
#include <string> int main()
{
{ std::string s = "a string";
{ std::string x = s + ", really";
std::cout << s << std::endl; }
std::cout << x << std::endl;
}
return ;
}
不正确。x声明在第二个{}范围了。出了第二个{}范围,就不知道x是什么了。
修改如下,把x的声明放在第一个{}里面
int main()
{ { std::string s = "a string";
std::string x;
{ x = s + ", really";
std::cout << s << std::endl; }
std::cout << x << std::endl;
} system("pause");
return ;
}
5)下面程序输入 Samuel Beckett 预测输出?
#include <iostream>
#include <string> int main()
{ std::cout << "What is your name? ";
std::string name;
std::cin >> name;
std::cout << "Hello, " << name
<< std::endl << "And what is yours? ";
std::cin >> name;
std::cout << "Hello, " << name
<< "; nice to meet you too!" << std::endl; system("pause");
return ;
}
输入Samuel Beckett
输出:
What is your name? Samuel Beckett
Hello, Samuel
And what is yours? Hello, Beckett; nice to meet you too!
4.std::string中库函数的使用。的更多相关文章
- 源码阅读笔记 - 3 std::string 与 Short String Optimization
众所周知,大部分情况下,操作一个自动(栈)变量的速度是比操作一个堆上的值的速度快的.然而,栈数组的大小是在编译时确定的(不要说 C99 的VLA,那货的 sizeof 是运行时计算的),但是堆数组的大 ...
- std::string在多字节字符集环境下substr的实现方法
昨天写到<使用多字节字符集的跨平台(PC.Android.IOS.WP)编码/解码方法>中提到服务端使用std::string处理字符串,std::string对多字节字符集支持并不是很完 ...
- VC++ 中使用 std::string 转换字符串编码
目录 第1章说明 1 1.1 代码 1 1.2 使用 4 第1章说明 VC++中宽窄字符串的相互转换比较麻烦,借助std::string能大大减少代码量. 1.1 代码 函数声明如下 ...
- 实战c++中的string系列--std::string与MFC中CString的转换
搞过MFC的人都知道cstring,给我们提供了非常多便利的方法. CString 是一种非常实用的数据类型. 它们非常大程度上简化了MFC中的很多操作,使得MFC在做字符串操作的时候方便了非常多.无 ...
- std::string的Copy-on-Write:不如想象中美好(VC不使用这种方式,而使用对小字符串更友好的SSO实现)
Copy-on-write(以下简称COW)是一种很重要的优化手段.它的核心思想是懒惰处理多个实体的资源请求,在多个实体之间共享某些资源,直到有实体需要对资源进行修改时,才真正为该实体分配私有的资源. ...
- 实战c++中的string系列--std:vector 和std:string相互转换(vector to stringstream)
string.vector 互转 string 转 vector vector vcBuf;string stBuf("Hello DaMao!!!");----- ...
- C++中实现从std::string类型到bool型的转换
利用输入字符串流:std::istringstream bool b; std::string s = "true"; std::istringstream(s) >> ...
- Mysql: Connect/C++ 使用过程中发现返回 std::string 造成的内存泄露
在使用 Connect/C++ ,测试时发现在调用 getString 出现了内存增长的情况. ConstructOutput(); //打印出当前内存 ;i<;++i) { prepareSt ...
- string中getline,cin的方法getline(),get总结
一.string中的getline不是string的成员函数,属于全局函数,使用需要include<string>,有两个重载版本: 函数原型参见:http://www.cplusplus ...
随机推荐
- WCF NetTcpBinding 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
背景:WindowsService + WCF + NetTcpBinding 之前一直使用http协议模式,改为net.tcp之后隔段时间出现:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操 ...
- Yii 一些小的问题
是否验证 ======================= $model->save()执行时,如何不要验证? 我用的是表单模型,表单模型已经验证了,保存时不想用表模型验证,如何不让表模型验证.也 ...
- 【转】eclipse + Pydev 配置Python开发环境
原文网址:http://www.cnblogs.com/dflower/archive/2010/05/13/1734522.html 1. 下载并安装python,由于3.1版本貌似存在很多兼容问题 ...
- ORA-00845 : MEMORY_TARGET not supported on this system(调大数据库内存无法启动)
问题描述:调大数据库内存后,启动数据库报 ORA-00845 : MEMORY_TARGET not supported on this system . -- 调大数据库内存后,数据库启动报错[ro ...
- JMeter启动时显示Could not open/create prefs root node Software\JavaSoft\Prefs at root 0X80000002
在windows 7上启动jmeter时,提示错误: Java.util.prefs.WindowsPreferences <init> WARNING: Could not open/c ...
- 64位linux下rpm安装mysql的5.5.55版本
昨天同事开了个阿里云环境,让我帮他安装mysql数据库,本想着很简单的一件事,结果还是折腾了一番.坑很多,一路趟过,一个接一个,只能硬着头皮冲. 首先是下载压缩包,因为采用了rpm安装方式,所以下载的 ...
- sonar 获取扫描结果(二)
1.requestHeader中添加 消息头, key:Authorization,value:用户名:密码base64加密,再拼接字符串 "Basic "+base64加密结果( ...
- Java-Maven-Runoob:Maven Web 应用
ylbtech-Java-Maven-Runoob:Maven Web 应用 1.返回顶部 1. Maven Web 应用 本章节我们将学习如何使用版本控制系统 Maven 来管理一个基于 web 的 ...
- sysfs文件系统
3 sysfs文件系统 sysfs是一个基于内存的文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用.该文件系统的目录层次结构严格按照内核的数据结构组织.除了二进制文件外(只有特殊场合才使用 ...
- Java学习之SpringBoot整合SSM Demo
背景:在Java Web中Spring家族有着很重要的地位,之前JAVA开发需要做很多的配置,一堆的配置文件和部署调试一直是JavaWeb开发中的一大诟病,但现在Spring推出了SpringBoot ...