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\n\n";
  for(int city=0; city<Cities; city++)
  {
    cout << cities[city] << "\t";    //指针数组的使用方法和普通数组的使用方法是一样的*****
    for (int year = 0; year < Years; year++)
    {
      cout << maxtemps[year][city] << "\t";    //\t表示水平制表 使数据比较整齐
    }
    cout << endl;
  }
  cin.get();    //防止DOS闪退
}

效果如下:

 

 

 

posted @ 2019-03-02 20:42  兵临城下的匹夫  阅读(680)  评论(0编辑  收藏  举报
TOP