Part 1
Working with strings使用字符串
Working with strings使用字符串
Review
上节课内容回顾
在第0
部份通过解析小程序,我门学习了C++
的基本概念:
注释、标准头文件、作用域、表达式、语句、字符串直接量、输出。
注释
v
“//”
单行注释符,多用于较短注释,为程序员优先采用
v
“/*”
开始
,“*/”
结束
,
连续多行注释或处理不想编译的程序代码
v
c(console)out.
头文件
v
header
头文件:两种
v
standard header
标准头文件,
如已学的iostream.h
、string.h
,其格式为:
#include <
文件名.
扩展名>
v
用户自定义(
编写)
的头文件,文件名用用双引号括起,其格式为:
#include “
文件名.
扩展名”
在这一部分,继续学习基本概念,通过使用字符串编写简单程序,学习声明、初始化变量,进一步了解输入和string
库。
本部分内容安排
1. Input
输入
2. Framing a name
为姓名装框
3. Details 小结
1. Input
输入
请阅读以下修改版的 “Hello”
程序
// ask for a person's name, and greet the person
#include <iostream>
#include <string>
int main()
{
// ask for the person
‘s name 请输入你的名字
std::cout << "Please enter your first name: ";
// read the name 读名字
std::string name; // define name
std::cin >> name; // read into
// write a greeting 写贺语
std::cout << "Hello, " << name << "!" << std::endl;
return 0;
}
此程序运行时
屏幕显示:
Please enter your first name:
输入以下名字作为响应:
Kitty
程序将会输出:
Hello, Kitty!
程序解析 1
// ask for a person's name, and greet the person
#include <iostream>
#include <string>
int main()
{
// ask for the person
‘s name 请输入你的名字
std::cout << "Please enter your first name: ";
// read the name 读名字
std::string name; // define name
std::cin >> name; // read into
// write a greeting 写贺语
std::cout << "Hello, " << name << "!" << std::endl;
return 0;
}
解析:name
变量variable
,是具有名称的对象object
为读入输入,找个存放地方
std::string name
;
“
std
”表示标准库;
string
表示类型;
name
表示变量
Name
:变量
Ø
变量:一个具有名称的对象
Ø
对象:计算机中一段具有类型的内存空间
Ø
有些对象没有名称
Object, Name & Variable
An Object
不一定有 Name
Variable
一定有 Name
A Variable
是个有 Name
的Object
v
变量name
类型是std::string,
使用字符串
string
是标准库一部分,
std::string
相关头文件是<string>
v
定义在一个函数体内(在一对花括号内),是局部变量
v
局部变量仅存活在花括号括起的程序运行期内
v
程序运行至
“}
”
,变量被销毁、变量所占内存释放
v
局部变量有限的生存期是区分变量和对象的一个重要依据
定义变量方法
定义一个名为name
的string
变量(具名对象)
后,能够对变量name
做库允许的所有操作
格式:
数据类型
变量名;
或
数据类型
变量名,
变量名,…,
变量名;
如: char C; //
定义字符变量 C
int i,j; //
定义整型变量i, j
float x,y,z, //
定义实型变量
A bit extra
…
整数类型int
的值是指在
-32 768 到 32 767
-32 768 到 32 767
范围之内的整数值。
程序解析 2
// ask for a person's name, and greet the person
#include <iostream>
#include <string>
int main()
{
// ask for the person
‘s name 请输入你的名字
std::cout << "Please enter your first name: ";
// read the name 读名字
std::string name; // define name
定义变量
std::cin >> name; // read into
“
读取到变量
name
中
、、、“
// write a greeting 写贺语
std::cout << "Hello, " << name << "!" << std::endl;
return 0;
}
初始化 Initialize
std::cin >> name;
//
把名字读进name
v
标准库要求每一个string
对象都要有一个初始化值
v
在定义一个变量时,对它进行隐式初始化
v
在创建一个字符串时,
可对它赋明确值
若未赋值,则为空字符串(不包含任何字符)
v
一个字符串还可以通过直接给它一串字符或另一个字符串变量来初始化:
std::string othername = " Kitty ";
std::string name = othername;
语句分析-输入
std::cin >> name;
//
把名字读进
name
库使用
>>
运算符
&
std::cin
进行输入
把
std::cin
中输入的值读入变量
name
中
v
用库读字符串:
首先略去输入开始时碰到的
whitespace
空白字符
(
space
空白
, tab, backspace, or the end of the line
)
然后连续地读字符到
name
变量中
直至
whitespace
空白字符或文件结束标记为止
v
表达式执行结果:读输入词
(
字符串
)
,再存储到变量
name
中
程序解析 3
// ask for a person's name, and greet the person
#include <iostream>
#include <string>
int main()
{
// ask for the person
‘s name 请输入你的名字
std::cout << "Please enter your first name: ";
// read the name 读名字
std::string name; // define name
定义变量
std::cin >> name; // read into
// write a greeting 写贺语
std::cout << "Hello, " << name << "!" << std::endl;
return 0;
}
语句分析-输出
std::cout << "Hello, " << name << "!" << std::endl;
1.
输出字符串直接量“Hello,”
2.
输出字符串变量name
的值
3.
对std::endl
的值写操作,结束输出行
4.
刷新缓冲区buffer
5.
系统立即向输出流写入数据
刷新缓冲区flashes the buffer
库使用缓冲区buffer
来积累待写的字符,这样,他就能把几个输出操作合并到一个单独的写操作中了。endl
有刷新缓冲区作用。
2. Framing a name 为姓名装框
输出分析
程序有五行长度相同的输出,各行组成:
v
1st & 5th line:
框架开始,一串 *
字符组成;其长度跟3rd line:
名字、问候(Hello)
、两端空格、两端各一个 *
字符
v
2nd & 4th line:
头尾两端各一个 *
字符、适量空格
v
3rd line:
头尾两端各一个 *
字符、空格,中间greeting
信息
Part 1 Pragram
1.1
输入
// ask for a person's name, and greet the person
#include <iostream>
#include <string>
int main()
{
// ask for the person's name
请输入你的名字
std::cout << "Please enter your first name: ";
// read the name
读名字
std::string name; // define name
std::cin >> name; // read into
// write a greeting
写贺语
std::cout << "Hello, " << name << "!" << std::endl;
return 0;
}
1.2
为姓名装框
// ask for a person's name, and generate a framed greeting
#include <iostream>
#include <string>
int main()
{
std::cout << "Please enter your first name: ";
std::string name;
std::cin >> name;
// 第3行,输出的问候语
const std::string greeting = "Hello, " + name + "!"; A
//第2&4行,输出的空白为主
const std::string spaces(greeting.size(), ' ');
const std::string second = "* " + spaces + " *";
B
//第1&5行,输出一连串 *
const std::string first(second.size(), '*');
C
// write it all 输出所有内容
std::cout << std::endl;
std::cout << first << std::endl;
std::cout << second << std::endl;
std::cout << "* " << greeting << " *" << std::endl;
D
std::cout << second << std::endl;
std::cout << first << std::endl;
return 0;
}
程序
A
部分解析
// 3rd line,
输出问候语
const std::string greeting = "Hello, " + name + "!";
const
把变量定义成常量
用“
=
“符号给变量赋值
用“
+
“符号连接字符串直接变量
注意:若变量是常量,需在定义时初始化。
在此用 “=”
初始化。
若输入“Kitty”,
以上语句的输出将为:
Hello, Kitty!
程序B
部分表达式1
解析
const std::string spaces(greeting.size(), ' ');
greeting
为对象
;size
()为成员
“' '
“
greeting.size()
调用成员函数
v
greeting.size():
对象greeting
有一个成员size
成员size
是个函数;
v
A
部分已定义greeting
为std::string
类型;
v
greeting
包含的字符个数,即对greeting.size()
求值产生的整数
v
字符直接量表示一个字符,由单括号括起
理解 std::string spaces(greeting.size(), ' ');
v
如果有定义:std::string stars (10,
‘*
’);
stars.size()
的结果是10
,即字符串stars
的长度
stars
本身包括10
个 *
字符,即**********
*********************
*
*
*
Hello, Kitty! *
*
*
*********************
第3
行,greeting(
不包括两端 ‘*’)
第2&4
行, spaces(
不包括两端 ‘*’)
v
故 spaces = greeting
字符个数
且字符都为空白,即 ‘ ’
const std::string second = "* " + spaces + " *";
second : “*”
、空白字符串、“*”
这就是第2 & 4
行的输出
3. Details
小结
1) string
类型
v
定义于标准头文件<string>
中
v
一个string
类型的object
对象包含一连串(0
或多个)
字符
char & string
类型
v
char
类型表示一个字符,用单引号 ‘ ’
括起;
v
string
类型表示一串字符,用双引号 “ ”
括起
string
类型数据操作
假如变量及类型为:n:
整数,c:char
类型
对string
类型数据操作包括:
std::string s;
把s
定义为类型为std::string
、初始为空的变量。
std::string t=s;
把t
定义为类型为std::string
的变量,其初始值包含字符同s; s
可为一个字符串或字符串直接量。
std::string z(n,c);
定义变量z
为std::string
类型,其初始化为包含n
个字符c
的字符串。c
必须是一个字符,不能是字符串或字符串直接量。
s+t
此表达式结果为std::string
类型,包含的字符串前半部为s
中所有字符,后半部为t
中所有字符。
s.size()
表示s
包含的字符个数。
2)
程序中变量定义的3
种形式
1.
用明确的初始化值来定义变量:
std::string hello=“Hello”;
2.
根据类型和给定的表达式来构造一个变量:
std::string stars(100,
‘*
’);
3.
定义一个变量,定义是不明确制订它的初始化值。此变量的初始化值取决于它的类型。
std::string name;
3
)输入
执行std::cin>>v
表达式会忽略任何在标准输入流中的空白字符,然后从标准输入把数据读入到变量v
中。
这个表达式会返回类型为istream
的std::cin
,这样,我们就可以进行链式的输入操作。