C++程序设计课本自己不熟悉的部分

标准输入输出流的控制符

以下均包含在iomanip头文件

控制符 作用
dec 设置数字的基数为10
hex 设置数字的基数为16
oct 设置数字的基数为8
setfill( c ) 设置填充字符c,c可以是字符常量或字符变量
setprecision(n) 设置浮点数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed或scientific形式输出时,n代表的是小数位数
setw(n) 设置字段宽度为n
setiosflags( ios:: fixed ) 设置浮点数以固定的小数位数显示
scetiosflags( ios:: scientific ) 设置浮点数以科学计数法(即指数形式)显示
setiosflags( ios:: left ) 输出数据左对齐
setiosflags( ios:: right ) 输出数据右对齐
setiosflags( ios:: skipws ) 忽略前导的空格
setiosflags( ios:: uppercase ) 数据以十六进制形式输出时字母以大写形式表示
setiosflags( ios:: lowercase ) 数据以十六进制形式输出时字母以小写形式表示
setiosflags( ios:: showpos ) 输出正数给出‘+’号
#include <iostream>
  #include <iomanip>
  using namespace std;
  int main(){
      /*输出双精度数*/
      double a=123.4567890123;
      cout<<a<<endl;
      cout<<setprecision(9)<<a<<endl;
      cout<<setprecision(5);
      cout<<setiosflags(ios::fixed);
      cout<<a<<endl;
      cout<<setiosflags(ios::scientific)<<setprecision(4)<<a<<endl;
      cout<<endl;
      return 0;
      }
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
     /*输出整数*/
      int b=123456;
      cout<<b<<endl;
      cout<<hex<<b<<endl;
      cout<<setiosflags(ios::uppercase)<<b<<endl;
      cout<<oct<<b<<endl;
      cout<<setiosflags(ios::fixed)<<setprecision(3)<<b<<endl;
      cout<<setiosflags(ios::scientific)<<setprecision(3)<<b<<endl;
      cout<<setfill('*')<<setw(10)<<b<<endl;
      cout<<dec<<setiosflags(ios::showpos)<<b<<endl;
      return 0;
      }
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
      /*各行小数点对齐*/
      double c=123.456,d=3.14156,e=-3254.543;
      cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2);
      cout<<setw(10)<<c<<endl;
      cout<<setw(10)<<d<<endl;
      cout<<setw(10)<<e<<endl;
      return 0;
}

  • 舍弃小数时采用四舍五入
  • setw(n)只能够对其后一个输入项起作用
  • setiosflags(ios::showpos)对十进制的数有效

输出流函数

  1. cin流:流提取符“>>”从流中提取数据时通常跳过空格,tab,换行符等空白字符
  2. get函数:
    调用形式 a.[无参数的get函数]cin.get():从指定的输入流中提取一个字符(包括空白字符)
    b.[有参数的get函数]cin.get(ch):从指定的输入流中提取一个字符,赋给ch
    c.[三个参数的get函数]cin.get(字符数组,字符个数,终止字符):从指定输入流中 提取n-1个字符,若提前遇见终止字符,则结束提取
   #include <iostream>
   using namespace std;
   int main(){
       char ch;
       cout<<"please input a sentense"<<endl;
       while((ch=cin.get())!=EOF)
           cout.put(ch);
       return 0;
   } 
   #include <iostream>
   using namespace std;
   int main(){
       char ch[5];
       cout<<"please input a sentense"<<endl;
       cin.get(ch,5,'\n');
       cout<<ch;
       return 0;
   }

  1. getline函数:从输入流中读取一行字符,其用法与带三个参数的get函数类似。
    即:cin.getline(字符数组,字符个数n,终止标志字符)
   #include <iostream>
   using namespace std;
   int main(){
       char ch[10];
       cin.getline(ch,10,'\n');
       cout<<ch;
       return 0;
   }
  1. getchar:从终端输入一个字符(用法跟get有点像)
   #include <iostream>
   using namespace std;
   int main(){
       char ch;
       cout<<"please input a sentense"<<endl;
       while((ch=getchar())!=EOF)
           putchar(ch);
       return 0;
   }

函数

  1. 内置函数:指定内置函数的方法:在函数首行的左端加一个关键字inline即可。

    a.可以在声明与定义函数时同时写inline,也可以只在声明时加inline
    b.只有那些规模较小并频繁调用的简单函数,才适合声明为内置函数

  2. 函数的重载:即对一个函数名重新赋予它新的含义使一个函数名可以多用

    a.重载函数的参数个数,参数类型或参数顺序三者中,必须至少有一种不同,函数返回值类型可同可不同。
    b.同名函数的功能应该相同或相近。

   #include <iostream>
   using namespace std;
   int max(int a,int b);
   double max(double a,double b);
   
   int main(){
       int a=3,b=4;
       cout<<"a="<<a<<"b="<<b<<endl;
       cout<<"max="<<max(a,b);
      double c=3.14,d=65.21;
      cout<<"c="<<c<<"d="<<d<<endl;
      cout<<"max="<<max(c,d);
      return 0;
  }
  
  int max(int a,int b){
      return (a>b?a:b);
  }
  double max(double c,double d){
      return (c>d?c:d);
  }

  1. 函数模板的使用:可以简化函数体完全相同,只是形参类型不同重复编程的问题。
    实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。
   #include <iostream>
   using namespace std;
   template <typename T>//typename可以换成class
   T max(T a,T b){
       return (a>b?a:b);
   }
   
   int main(){
       int a=3,b=4,e;
      cout<<"a="<<a<<"b="<<b<<endl;
      e=::max(a,b);//原本写的是e=max(a,b),编译的时候调用了函数库里的max函数,所以要用::max(a,b)
      cout<<"max="<<e;
      double c=3.14,d=65.21,f;
      cout<<"c="<<c<<"d="<<d<<endl;
      f=::max(c,d);
      cout<<"max="<<f;
      return 0;
  }

  1. 有默认参数的函数:给形参一个默认值,这样形参就不一定要从实参取值了。

    a.指定默认值的参数必须放在形参表列的最右端。
    b.必须在函数调用之前将默认值的信息通知编译系统。若声明与定义时均给出了默认值,且默认值不同时,以声明的默认值为准(最好只在声明时给出默认值)
    c.一个函数不能既作为重载函数,又作为有默认参数的函数。因为在调用函数时,如果少写一个参数,就无法判定到底是利用重载函数还是有默认值的函数。
   #include <iostream>
   using namespace std;
   int max(int a,int b,int c=0);
   int main(){
       cout<<max(3,4)<<endl;
       cout<<max(3,4,5)<<endl;
       return 0;
   }
   
  int max(int a,int b,int c){
      int max=(a>b?a:b);
      if(max<c)
          max=c;
      return max;
  }

字符数组

  1. 定义和初始化字符数组

    初始化
    a.将逐个字符赋给数组中各元素
    char c[5]={‘t’,‘w’,‘a’,‘e’,‘c’};
    b.用字符串常量来初始化字符数组
    char word[5]="gary"字符串常量的最后由系统自动加上一个’\0’,"gary"的长度为5
    定义
    char c[5];
    c={‘c’,‘h’,‘i’,‘n’,‘a’}错误不能对整个数组一次性赋值
    c[0]=‘c’,c[1]=‘h’,c[2]=‘i’,c[3]=‘n’,c[4]=‘a’;正确
  2. 字符数组的输入输出
    char str[20];
    cin>>str;
    cout<<str;

字符串处理函数

  1. 字符串连接函数strcat
    strcat(char [],const char[]);
    将第2个字符数组中的字符串连接到前面字符数组的字符串的后面
  2. 字符串复制函数strcpy
    strcpy(char[],const char[]);
    将第2个字符数组中的字符串复制到第1个字符数组中去,将第1个字符数组的字符覆盖(就算第一个字符数组的元素多于第二个字符数组的元素,也会全部被覆盖)

    a.第二个字符数组也可以用字符串常量代替
    b.strcpy(str1,str2,2);将第二个字符数组前两个元素复制到str1中,再加一个’\0’
  3. 字符串比较函数strcmp
if(strcmp(str1,str2)>0)
	cout<<"yes";

4.字符串长度函数strlen
strlen(const char []);测的是字符串的实际长度,不包括’\0’

字符串常量

#include < string >

  • 赋值:
    a.string1=“china” ;
    b.string1=string2;
    c.string string1=“That”;
    string1[2]=‘e’;
  • 输入输出
    cin>>str;
    cout<<str;
  • 复制直接用赋值号(str1=str2)
  • 连接直接用+号(str1=str1+str2)
  • 比较直接用关系运算符

猜你喜欢

转载自blog.csdn.net/weixin_43843938/article/details/86523222