C++第二讲

 
Part 1
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
       范围之内的整数值。
 
程序解析 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 ,这样,我们就可以进行链式的输入操作。
             
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值