2020.4.22第一章C++与面向对象程序设计概述1

课本:电子工业出版社《C++面向对象程序设计(第3版)》 杜茂康等著

头文件

传统 C++的头文件有 :iostream.h、fstream.h、string.h,stdio.h、ctype.h、math.h。
标准 C++对应的头文件有 :iostream、fstream、string,cstdio、cctype、cmath。 其中,stdio、ctype、math 是来源于 C 库文件。

输出控制符

设置浮点数的精度

  • 所在头文件:iomanip
  • 使用函数:setprecision(n)
  • 使用范围:一直有效,直到再次用setprecision改变输出精度为止。
    示例:
cout<<setprecision(2)<<3.1415926<<"\t"<<setprecision(3)<<3.1415926<<endl;

运行结果:

3.1 3.14

设置输出域宽和对齐方式

  • 所在头文件:iomanip
  • 使用函数:setw(n)
  • 适用范围:仅对紧随其后的一个输出数据有效。
  • 默认输出对齐方式:右对齐
    示例:
cout<<"123456781234567890"<<endl;
cout<<setw(8)<<23.27<<setw(8)<<78<<endl;
cout<<setw(8)<<"Abc"<<78<<endl;

运行结果:

123456781234567890

23.27 78

Abc78

设置对齐方式

  • 所在头文件:iomanip
  • 使用函数:setiosflags()与resetiosflags()
    • 对齐:
      • 左对齐:setiosflags(ios::left)
      • 右对齐:setiosflags(ios::right)
  • 适用范围:一直有效直到下一个setiosflags或者resetiosflags出现。
    示例:
cout<<"123456781234567812345678"<<endl;
cout<<setiosflags(ios::left)<<setw(8)<<456<<setw(8)<<123<<endl;
cout<<setiosflags(ios::right)<<setw(8)<<123<<endl;

运行结果:

123456781234567812345678

456 123

123

数制基数

  • 在输入数据时:
    • 十进制:cin>>直接输入数据本身
    • 十六进制:cin>>hex>>在要输入的数据前加入0x或者0X,如0x1A
    • 八进制:cin>>oct>>在输入的数据前加0,如043
  • 在输出数据时:
    • 十进制:dec<<
    • 十六进制:hex<<
    • 八进制:oct<<
  • 作用范围:一直有用直到下一个进制命令出现
    示例:
int x = 34, y, z;
cout << hex << x << "\t"<<dec << x<<"\t" << oct << x << endl;
cin >> hex >> y>> oct >> z;
cout <<dec<< y <<"\t" << z<<endl;

运行结果:

22 34 42

0x11↙ 011↙

17 9

关于string

string对象的定义和初始化

  • 所在头文件:string
定义形式
string c;
string c1("Chloe-fengtt");
string c2 = c1;
string s[10];       //能保存十个字符串
string s(5,'c');        //即为"ccccc"

赋值

赋值可以不用strcpy()函数。

string s1("Chloe");
string s2("feng-tt");
s1 = s2;

连接

可以用"+"和"+="。

string s1("Chloe");
string s2("feng-tt");
string s3;
s3 = s1 + "," + s2;
s1 += "," + s2;

输入输出

可以直接使用cin,cout。

大小比较

  • 使用比较运算符
  • 从第一位开始,依次比较每一位的ASCII码大小,如果出现某一位不相等,就以这一位的大小来确定字符串的大小。

如“ace”与“abc”,c>b,故“ace”>“abc”。

  • 如果每一位都相等,只是长度不同,则较长者大。

如"computer"和"comp","computer">"comp"。

数据输入的典型问题

输入数据类型不匹配引发的问题

如何为变量输入空白字符?

  • 用get()函数输入空白字符
    • 此空白符包括tab,空格键,回车键等方式输入的空白格
cin.get(char c);
  • 用getline()函数输入包含空白的长字符串
    • 结束输入的方法:
      • 输入流中的字符数多余getline()指定的个数,它从输入流中读够了n-1个字符。
      • 遇到指定的结束符号
cin.getline(char *s1,int n,char = "\n");    //c用来保存输入的数据,n指字符串长度,第三个参数指定了提取数据的结束符(默认“\n”)

getline()没有读取输入的数据就结束了?

  • 输入流中的字符多于getline()所需要的字符数

    • cin.clear函数:

    对我来讲还是有点深奥,就不摘了:cin.clear()函数

    • cin.ignore函数:

    cin.ignore(a,ch)方法是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则cin.ignore()函数执行终止;否则,它继续等待。它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。

#include<iostream> 
using namespace std; 
void main(){     
    char  s1[100];         
    char  s2[10];     
    cout << "use getline input s1:  ";                 // L1     
    cin.getline(s1, 11);                               // L2     
    cout << "input s2:  " << endl;                     // L3     
    // cin.clear();                                      // L4*     
    // cin.ignore(1024,'\n');                            // L5*    
    cin.getline(s2, 6);                                // L6     
    cout << "s1=" << s1 << endl;                       // L7     
    cout << "s2=" << s2 << endl;                       // L8 
    } 

摘自:cin.ignore()函数

  • getline()提取了上一条语句遗留的“\n”结束符,不再读入数据的问题
    • getchar()、get()函数和ignore()都可以解决问题。

猜你喜欢

转载自www.cnblogs.com/Chloe-fengtt/p/12755917.html