C++中auto关键字和for循环使用详解

Dear 丶 2023-06-12 09:16 149阅读 0赞

转载自https://blog.csdn.net/LiuBo_01/article/details/80752734
例题: 编写一段程序,读入一段包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分。
代码:

  1. //编写一个程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分
  2. #include <iostream>
  3. #include <cstring>
  4. #include<cctype>
  5. using namespace std;
  6. int main()
  7. {
  8. /*src为源字符串即要操作的字符串,dest为目标字符串,存放操作结果*/
  9. string src, dest;
  10. getline(cin, src); /*从输入中读取一行赋值给str1*/
  11. for (auto c : src) /*对str中的每个字符*/
  12. {
  13. if (!ispunct(c)) /*如果该字符不是标点符号*/
  14. {
  15. dest.push_back(c); /*把该字符尾插到dest中*/
  16. }
  17. }
  18. cout << dest << endl; /*输出dest中的内容*/
  19. system("pause");
  20. return 0;
  21. }

在这里插入图片描述
这段代码的功能是,从键盘输入一个字符串,去除字符串中的标点符号后输出。在上面的代码中用到的函数ispunct() ,需要包含的头文件为 < cctype>,作用是判断是否是标点符号
for (auto c : src) 是C++11新标准提供的一种语句范围for语句,下面详细解释

auto关键字

C++中的auto关键字是一个类型说明符,通过变量的初始值或者表达式中参与运算的数据类型来推断变量的类型。编程时通常需要把表达式值式赋给变量,这就要求在声明变量时清楚的知道表达式的类型,C++11新标准引入了auto 类型说明符,让编译器去分析表达式的类型。由于,需要编译器推断变量或表达式的类型,所以,auto定义的变量必须初始化。例如:

  1. auto val = 5.2f; //编译器会根据初始化的值来推断val的数据类型为flaot,但要注意如果去掉f则编译器会认为val为double型变量
  2. auto x = y + z; //x初始化为y和z相加的结果,由y和z的数据类型推断x的数据类型
  3. auto num; //但如果在C++中出现这样的语句,会编译报错,提示“类型包含“auto符号”必须具有初始值设定项”

使用auto也能在一条语句中声明多个变量。因为一条语句声明时只能有一种基本数据类型,所以该语句中的所有变量初始基本数据类型必须一样,例如:

  1. auto i = 0, *p = &i; //正确:i是整数、p是整形指针
  2. auto sz = 0, pi = 3, 14; //错误:sz和pi的类型不一致

在范围for语句中,经常会使用到auto关键字,正如文章开篇举得那个例子,范围for语句遍历给定序列中的每个元素并对序列中的每个值执行某种操作。其语法形式为:

  1. for (declaration : expression)
  2. {
  3. statement
  4. }

declaration 部分定义一个变量,该变量用于访问序列中的基础元素,expression部分是一个对象,用于表示一个序列。
每次迭代,declaration部分的变量会初始化为expression部分的下一个元素值,statment是对字符的操作语句

发表评论

表情:
评论列表 (有 0 条评论,149人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++ 的auto关键字

    C中的auto关键字没啥大用,因为它是用于显式地说明变量是自动存储类型的,但是auto又只能用于默认就是自动存储的局部变量,即函数中定义的变量和函数的参数,所以·····emm

    相关 C++之auto关键字

    【在那些情况下要申明类型】 定义变量类型 函数返回值,函数参数 表达式返回变量类型 【为什么auto】 在开发实践中,有时候我们并不能非常容易地确定一个变量