转载自https://blog.csdn.net/LiuBo_01/article/details/80752734
例题: 编写一段程序,读入一段包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分。
代码:
//编写一个程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分
#include <iostream>
#include <cstring>
#include<cctype>
using namespace std;
int main()
{
/*src为源字符串即要操作的字符串,dest为目标字符串,存放操作结果*/
string src, dest;
getline(cin, src); /*从输入中读取一行赋值给str1*/
for (auto c : src) /*对str中的每个字符*/
{
if (!ispunct(c)) /*如果该字符不是标点符号*/
{
dest.push_back(c); /*把该字符尾插到dest中*/
}
}
cout << dest << endl; /*输出dest中的内容*/
system("pause");
return 0;
}
这段代码的功能是,从键盘输入一个字符串,去除字符串中的标点符号后输出。在上面的代码中用到的函数ispunct() ,需要包含的头文件为 < cctype>,作用是判断是否是标点符号
for (auto c : src) 是C++11新标准提供的一种语句范围for语句,下面详细解释
auto关键字
C++中的auto关键字是一个类型说明符,通过变量的初始值或者表达式中参与运算的数据类型来推断变量的类型。编程时通常需要把表达式值式赋给变量,这就要求在声明变量时清楚的知道表达式的类型,C++11新标准引入了auto 类型说明符,让编译器去分析表达式的类型。由于,需要编译器推断变量或表达式的类型,所以,auto定义的变量必须初始化。例如:
auto val = 5.2f; //编译器会根据初始化的值来推断val的数据类型为flaot,但要注意如果去掉f则编译器会认为val为double型变量
auto x = y + z; //x初始化为y和z相加的结果,由y和z的数据类型推断x的数据类型
auto num; //但如果在C++中出现这样的语句,会编译报错,提示“类型包含“auto符号”必须具有初始值设定项”
使用auto也能在一条语句中声明多个变量。因为一条语句声明时只能有一种基本数据类型,所以该语句中的所有变量初始基本数据类型必须一样,例如:
auto i = 0, *p = &i; //正确:i是整数、p是整形指针
auto sz = 0, pi = 3, 14; //错误:sz和pi的类型不一致
在范围for语句中,经常会使用到auto关键字,正如文章开篇举得那个例子,范围for语句遍历给定序列中的每个元素并对序列中的每个值执行某种操作。其语法形式为:
for (declaration : expression)
{
statement
}
declaration 部分定义一个变量,该变量用于访问序列中的基础元素,expression部分是一个对象,用于表示一个序列。
每次迭代,declaration部分的变量会初始化为expression部分的下一个元素值,statment是对字符的操作语句