• c++_语句块_cout和endl新的声明方法_将字符串的内容反转_逗号运算符_c风格类字符串的比较_string类字符串的比较_类型别名typedef和#define_do while 循环_c++11:基于范围的for循环_循环和文本输入(OOP的引入)_二维数组


    /* 语句块 用花括号括起来的语句 */
    #include <iostream>
    int main()
    {
            using namespace std;
      int x = 20;
      {
        int y = 100;
        cout << x << endl; //ok
        cout << y << endl; //ok
      } //以上就是一个语句块,y变量定义在语句块里面,所以y只能在改语句块中使用,在语句块之外是不能使用的
      cout << x << endl; //ok
      //cout << y << endl; //invalid
      return 0;
    }

    /*新变量就会隐藏旧变量,另外注意cout和endl新的声明方法*/
    #include <iostream>
    int main()
    {
    using std::cout; //cout新的声明方法
    using std::cin; //endl新的声明方法
    using std::endl; //endl新的声明方法
    char zero;
    int x = 20;
    {
    cout << x << endl; //打印20
    int x = 100;
    cout << x << endl; //打印100
    }
    cout << x << endl; //打印20

    cin >> zero;
    return 0;
    }

    /*将字符串的内容反转*/
    #include <iostream>
    #include <string>
    void main()
    {
      using namespace std;
      cout << "输入一个单词: ";
      string word; //定义一个字符串变量word
      cin >> word;
      cout <<"输入单词的个数为:"<< word.size() << endl;   //打印输入的单词的个数
      for (int i = 0, j = word.size() - 1; i < j; i++, j--)   //减1是因为数组的索引是从0开始的
      {
        char temp;
        temp = word[j]; //将输入的单词最后一个字母赋给temp
        word[j] = word[i]; //将输入的单词的第一个单词赋到单词最后一个位置上
        word[i] = temp; //将输入的单词最后一个字母赋到单词第一个位置上
      }
      cout <<"反转后的单词形式为:"<< word << endl;
      cout << "Done" << endl;
      cin >> word; //防止DOS闪退
    }

    /*逗号运算符*/
    /*
    01)常用于将两个或者更多的表达式放到一个for循环表达式中
    02)逗号运算符确保先计算第一个表达式,然后计算第二个表达式(换句话说,逗号运算符就是一个顺序点)
    如:i=20,j=2*i; 是安全的 先计算i=20再去计算j的值
    03)逗号运算符的优先级是最低的
    cata = 17,240; //cata=17 即"="的优先级比","的优先级高
    cata = (17,240); //cata=240
    */

    /* c风格类字符串的比较 */
    /*
    01)char word = "mate"; //数组名word只是数组的地址
    word == "mate"; //用引号括起来的也是地址,所以两个地址判断是否相等,结果是肯定不相等的
    02)使用c风格字符串库中的strcmp()函数来比较,改函数接受两份字符串地址为参数,这意味着参数可以是指针、字符数组名或字符串常量
    如果str1和str2相同,那么表达式strcmp(str1,str2)==0为true
    如果str1和str2不相同,那么表达式strcmp(str1,str2)!=0和strcmp(str1,str2)均为true
    如果两个字符串不相同,则该函数返回1
    如果str1在str2的前面,那么strcmp(str1,str2)<0 返回1
    如果str1在str2的后面,那么strcmp(str1,str2)>0 返回1
    */

    #include <iostream>
    #include <cstring> //for strcmp()

    int main()
    {
      using namespace std;
      char zero;
      char word[] = "?ate"; //定义数组,刚刚忘了在word之后加中括号导致报错
      for (char ch = 'a'; strcmp(word,"mate"); ch++) //如果word不和mate相等,那么strcmp函数返回1,循环继续进行
      {
        cout << word << endl;
        word[0] = ch; //将word数组中的第一个数用ch替换下来
      }
      cout << "最终匹配的字符串数组word是:" << word << endl;
      cin >> zero; //防止DOS闪退
      return 0;
    }

    /* string类字符串的比较 */
    由于string类函数重载(重定义)了这些运算符,因此string类字符串可以使用
    关系运算符进行比较
    string类重载了运算符!=的方式让我们能够使用它
    #include <iostream>
    #include <string> //for string class

    int main()
    {
      using namespace std;
      string word = "?ate"; //定义string类字符串
      for (char ch = 'a'; word != "mate"; ch++) //直接用关系运算符!=进行比较
      {
        cout << word << endl;
        word[0] = ch;
      }
      cout <<"最终匹配的字符串word是:"<< word << endl;
      cin >> word;
      return 0;
    }

    /* 类型别名typedef和#define */
    /*
    01)使用预处理器#define
    如:#define BYTE char //使BYTE成为char的别名,注意后面没有分号
    02)使用关键字typedef
      如:typedef char byte; //使byte成为char的别名,注意后面有分号
             typedef char* byte_pointer; //让byte_pointer成为char指针的别名
    03)在定义很多变量时,使用预处理器的方法不适用
      如:#define FLOAT_POINTER float* //让FLOAT_POINTER成为char指针的别名
             FLOAT_POINTER pa,pb; //有问题 相当于float* pa,pb;但是typedef不会出现这样的问题
    04)和#define相比,typedef是一种更好的选择
    05)typedef不会创建新类型,而只是在已有的类型创建一个新的名字
    */


    /* do while 循环*/
    /*
    01)句法:
      do
        body
      while(test-expression); //注意这里是有一个分号的
    02)先执行循环体body,再去判断test-expression是否成立,若成立,则再次执行循环体body;否则跳出循环
    03)
    */
    #include <iostream>
    int main()
    {
      using namespace std;
      char zero;
      int i; //不能定义在循环体内,否则在while的条件判断中i是不可用的
      do
      {
        cout << "请输入一个数字:" << endl;
        cin >> i;
      }

      while (i != 7);    //如果输入的数字是7那么退出循环,注意这里是有一个分号的
      cout << "my favorate number is:" << i << endl;
      cin >> zero; //防止DOS闪退
      return 0;
    }

    /* c++11:基于范围的for循环 */

    #include <iostream>

    void main()
    {
      char zero;
      double prices[] = {4.99,10.99,6.87,7.99,8.79}; //创建一个double型数组,但是这样创建的数组怎么样去算数组中数据的个数不太简单
                          //sizeof()和strlen()用于字符串字符串
                          //可使用vector和array等容器,使用size()函数得到元素的个数
      std::cout << "数组占的字节数数为:" << sizeof(prices) << std::endl;
      for (double x : prices)
        std::cout <<"原始数据为:"<< x << std::endl; //打印prices数组中的元素
      for (double &x : prices)
        x = x * 0.8; //改变数组中的值 每个值都乘以0.8
      for (int i = 0; i < 5; i++)
        std::cout << "乘上0.8后的数组数据为:" << prices[i] << std::endl;

      std::cin >> zero; //防止DOS闪退
    }

    /* 循环和文本输入 */
    //01原始的cin输入
    #include <iostream>
    void main()
    {
      using namespace std;
      int count = 0; //初始化初始计数值
      cout << "请输入字符,以#号结束,并按回车发送给cin:";
      char ch,zero;
      cin >> ch; //可以这样输入seek run# wwdd然后按下回车,此时会将s赋给ch剩余的字符将会保存在输入流中,等待着下次的cin
      while (ch != '#')
      {
        cout << "输入的字符为:" <<ch; //这里不加换行符,那么就可以完整的打印出#号前的单词,且无空格
        count++; //计算输入的字符数 ++count也可以
        cin >> ch; //cin在读取所有类型的数据时,会自动忽略回车和空格****** 所以上面打印的时候不会显示空格
      }
      cout << count << "chracters read" << endl;

      cin >> zero; //防止DOS闪退
    }

    /* 循环和文本输入 */
    02cin.get(char)函数输入(这样输入不会忽略空格)
    /*
    注意:由于c++支持被称为函数重载的OOP特性,所以cin.get()、cin.get(char)和cin.get(name,Arsize)是不一样的函数
    OOP特性(函数重载)允许创建多个同名函数,条件是他们的参数列表是不一样的
    如:使用cin.get(name,Arsize)函数,那么编译器就会找到使用char*和int作为参数的cin.get()函数版本
    使用cin.get(char)函数,那么编译器就会找到使用char作为参数的cin.get()函数版本
    使用cin.get()函数,那么编译器就会找到不使用参数的cin.get()函数版本
    */
    #include <iostream>
    void main()
    {
      using namespace std;
      char ch,zero;
      int count = 0;
      cout << "请输入字符,以#号结束,并按回车发送给cin:";
      cin.get(ch);
      while (ch != '#')
      {
        cout <<ch;   //这里不加换行符,那么就可以完整的打印出#号前的单词,且由于是cin.get()方法输入,所以有空格
        cin.get(ch);
        count++;
      }
      cout <<endl<< count << "chracters read" << endl; //这里也会把空格算上
      cin >> zero; //防止闪退
    }

    /* 二维数组 */
    //int maxtemps[4][5]=
    //{
      // {96,100,87,85,65},
      // {100,85,96,87,98},
      // {97,101,91,95,94},
      // {87,89,98,56,98}
    //}; //定义并初始化一个4行5列的二维数组,注意最后的分号勿忘
    #include <iostream>
    const int Cities = 5;
    const int Years = 4;    //定义两个不可修改的变量
    int main()
    {
      using namespace std;
      const char* cities[Cities] =     //定义指针数组,存储5个字符串的地址,使用指针数组的方法和使用普通数组方法是一样的
      {               //如果不用指针数组,那么需要这样定义:const char cities[25]={"..."} 这样的意思是将每个字符串的最大长度限制为24个字符
        "Gribble City",     //每个都需要占用25个字符的位置,5个就是125个字符的空间,因此指针数组更节省空间一些
        "Gribbletown",     //当然使用 const string cities[Cities]={"..."}也是比较节省空间的
        "New Gribble",
        "San Gribble",
        "Gribble Vitle"
      };   //使用const的意思是数组内容不可修改
      int maxtemps[Years][Cities]=
      {
        {96,100,87,85,65},
        {100,85,96,87,98},
        {97,101,91,95,94},
        {87,89,98,56,98}
      };    //定义并初始化一个4行5列的二维数组,注意最后的分号勿忘、
      cout << "Maximum tempratures for 2008-2010 ";
      for(int city=0; city<Cities; city++)
      {
        cout << cities[city] << " ";    //指针数组的使用方法和普通数组的使用方法是一样的*****
        for (int year = 0; year < Years; year++)
        {
          cout << maxtemps[year][city] << " ";    // 表示水平制表 使数据比较整齐
        }
        cout << endl;
      }
      cin.get();    //防止DOS闪退
    }

    效果如下:

     

  • 相关阅读:
    AES对称加密和解密
    Akka并发编程框架 -概念模型(Akka.net或者Orleans)
    .net经典书籍
    计算机专业经典著作(转载)
    windows创建定时任务执行python脚本
    数据库中为什么不推荐使用外键约束(转载)
    《SQL Server性能调优实战》知识点汇总
    数据库索引知识汇总
    ASP.NET常见异常处理示例
    MVC的HTTP请求处理过程(IIS应用程序池、CLR线程池)
  • 原文地址:https://www.cnblogs.com/YiYA-blog/p/10462821.html
Copyright © 2020-2023  润新知