为了美观,我们把输入和输出设计成如下:

      

#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中库函数的使用。的更多相关文章

  1. 源码阅读笔记 - 3 std::string 与 Short String Optimization

    众所周知,大部分情况下,操作一个自动(栈)变量的速度是比操作一个堆上的值的速度快的.然而,栈数组的大小是在编译时确定的(不要说 C99 的VLA,那货的 sizeof 是运行时计算的),但是堆数组的大 ...

  2. std::string在多字节字符集环境下substr的实现方法

    昨天写到<使用多字节字符集的跨平台(PC.Android.IOS.WP)编码/解码方法>中提到服务端使用std::string处理字符串,std::string对多字节字符集支持并不是很完 ...

  3. VC++ 中使用 std::string 转换字符串编码

    目录 第1章说明    1 1.1 代码    1 1.2 使用    4 第1章说明 VC++中宽窄字符串的相互转换比较麻烦,借助std::string能大大减少代码量. 1.1 代码 函数声明如下 ...

  4. 实战c++中的string系列--std::string与MFC中CString的转换

    搞过MFC的人都知道cstring,给我们提供了非常多便利的方法. CString 是一种非常实用的数据类型. 它们非常大程度上简化了MFC中的很多操作,使得MFC在做字符串操作的时候方便了非常多.无 ...

  5. std::string的Copy-on-Write:不如想象中美好(VC不使用这种方式,而使用对小字符串更友好的SSO实现)

    Copy-on-write(以下简称COW)是一种很重要的优化手段.它的核心思想是懒惰处理多个实体的资源请求,在多个实体之间共享某些资源,直到有实体需要对资源进行修改时,才真正为该实体分配私有的资源. ...

  6. 实战c++中的string系列--std:vector 和std:string相互转换(vector to stringstream)

    string.vector 互转 string 转 vector vector  vcBuf;string        stBuf("Hello DaMao!!!");----- ...

  7. C++中实现从std::string类型到bool型的转换

    利用输入字符串流:std::istringstream bool b; std::string s = "true"; std::istringstream(s) >> ...

  8. Mysql: Connect/C++ 使用过程中发现返回 std::string 造成的内存泄露

    在使用 Connect/C++ ,测试时发现在调用 getString 出现了内存增长的情况. ConstructOutput(); //打印出当前内存 ;i<;++i) { prepareSt ...

  9. string中getline,cin的方法getline(),get总结

    一.string中的getline不是string的成员函数,属于全局函数,使用需要include<string>,有两个重载版本: 函数原型参见:http://www.cplusplus ...

随机推荐

  1. ERP与MES

    EAS-ERP企业资源计划系统 能将企业的客户管理.商品管理.采购管理.仓储管理.销售管理.生产管理.应收应付.财务管理.工资管理.费用管理和业绩考核管理以及业务预警和全方位的分析汇总融为一体,为企业 ...

  2. CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\....\App_Web_default.aspx.cdcab7d2.zii776dc.dll”--“拒绝访问。 ”

    关于访问asp.net站点出现以下问题的解决办法: 问题: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v4.0.30319\Tempora ...

  3. Mac OS X显示隐藏文件命令

    defaults write com.apple.finder AppleShowAllFiles Yes && killall Finder //显示隐藏文件 defaults wr ...

  4. SPOJLCS Longest Common Substring

    题意 A string is finite sequence of characters over a non-empty finite set Σ. In this problem, Σ is th ...

  5. 监听文本框输入oninput和onpropertychange事件

    前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onkeydow ...

  6. jqprint网页打印时有页码和URL

    环境360浏览器或IE,解决方法在浏览器->文件->打印,把页码页脚勾选去掉. IE浏览器,打印->页码设置,把页眉页脚都置成空.

  7. Python学习笔记之os模块

    Python中的os提供了非常丰富的方法用来处理文件和目录,下面我们将详细的介绍os相关的一些方法和函数: os 路径相关的函数: 1.os.listdir(dirname):列出dirname目录下 ...

  8. Use the dkms from EPEL when install CUDA Toolkits on CentOS

    ###Use the dkms from EPEL. yum install epel-release yum install dkms # download the rpm from the NVi ...

  9. AppCan上下拉列表刷新

    function initBounce(funcTop, funcBottom){ uexWindow.setBounce("1"); if (!funcTop && ...

  10. 使用Statement接口实现增,删,改操作(工作中不常用这个,而用PreparedStatement接口)

    一.Statement接口 作用:用于执行静态 SQL 语句并返回它所生成结果的对象. 1. 创建数据库连接类及相册实体,代码如下: package com.learn.jdbc.util; impo ...