1.范围for循环
//将字符串s全变为大写
for(char &i : s) {
i = toupper(i);//字符处理函数<cctype>
}
范围for语句是C++11标准,用g++编译时,需要加上-std=c++11
,不然会提示range-based ‘for’ loops are not allowed in C++98 mode
范围for循环相对于传统for循环和while循环的优点是,我们无需关心循环边界条件,防止越界访问。
2.字符串输入
cin:忽略输入空白符
string temp;
while(cin >> temp){
cout << temp <<endl;//temp中无换行符
}
用cin输入字符串,cin会忽略输入流中的空白(空格符、换行符、制表符等),将连续的字符提取出来。例如输入分隔开的”hello world!”,实际会进入两次while,temp先是”hello”,再是”world!”
getline():保留输入空白符
string temp;
while(getline(cin, temp){
cout << temp <<endl;//temp中无换行符
}
用getline()输入字符串,可保留输入时的空白符。getline()在遇到换行符时会返回,返回时,不会将换行符保存到字符串中。
3.字符串、数组初始化
字符数组初始化
//错误,应该为char str[2] = "a";
char str[1] = "a";
//错误,字符数组未显式初始化
char str[5];
cout << str << endl;
//错误,不允许拷贝初始化
char a[] = b;
用字符串字面值初始化字符数组。上述语句会编译报错error: initializer-string for array of chars is too long
,"a"
是字符串,编译器会在字符串后面添加一个空字符串' '
,因此字符串字面值的实际长度要比它的内容多1,数组中包含