网页设计与网站建设 在线测试,免费搜索引擎入口,wordpress用orderby,网站开发方向目录
一、 字符串大小的比较
二、 ASCII码值
三、 基本框架代码 四、 解题思路
4.1 首字母问题
4.2 判定小写字母
4.3 小写字母转换为大写字母
五、空格判断
六、 代码模块化
6.1 满足的条件
6.2 代码完善
七、 题目解答
7.1 原始代码
7.2 改进代码
八、 拓展与…目录
一、 字符串大小的比较
二、 ASCII码值
三、 基本框架代码 四、 解题思路
4.1 首字母问题
4.2 判定小写字母
4.3 小写字母转换为大写字母
五、空格判断
六、 代码模块化
6.1 满足的条件
6.2 代码完善
七、 题目解答
7.1 原始代码
7.2 改进代码
八、 拓展与延伸 8.1 形参和实参
8.2 引用 通过本次练习将会学习到以下C知识点同时强化字符串的练习
字符大小的比较、字符运算、字符拼接ASCII码getchar()函数的使用函数的定义和使用函数的形参和实参引用 题目输出一个词组中每个单词的首字母的大写组合。输入中的第一行n代表之后一共有n组输入数据。其中每行单词多个每个单词长度不一单词之间空格数不一。
示例
输入
1
ad dfa fgs输出
ADF
一、 字符串大小的比较
在字符集中的ASCII码值来确定
二、 ASCII码值 三、 基本框架代码
#include iostream
#include string
using namespace std;
int main(){int n;cin n; //输入接收n行getchar(); //从输入中获取一个字符}
注意这里使用了 getchar() 函数来吸收一个回车符因为在输入 n 之后通常需要输入回车符才会输入下一行。
//原本 cout n endl;
之后仍然可以使用while循环来处理n行数据每一行数据使用getline(cin, n) 来进行接收。
string s; // 定义变量s, 接收每行输入的字符串
while(n--) {getline(cin, s); // 从标准输入读取一行字符串存储在字符串变量 s中string result; // 定义变量result, 用来输出经过处理后的结果
} 四、 解题思路
4.1 首字母问题
题目要求输出单词首字母为大写即存在两种情况第一种为直接就是大写另一种就是为小写。
如果第一个字符是小写字符则将之转换成大写字符再进行拼接。
4.2 判定小写字母
小写字母从 a 到 z 对应的ASCII码值是从 97 到 122且是连续的。
即如果输入的字符a, 并且z, 则一定在a和z的范围之内也就是一定是小写字母。
// 如果第一个字符是小写字符
if (s[0] a s[0] z) {}
4.3 小写字母转换为大写字母
大小写字符之间的差值是32 将小写字符做减法运算就可以得到对应的大写字符。
// 如果输入的字符是小写字符则进行转换
if (s[0] a s[0] z) {// ASCII码中小写字母和大写字母相差32s[0] - 32;
}
result s[0];// 将每行的第一个字符转换成大写后添加到result中
五、空格判断
因为在单词之间存在数量不一的空格因此需要做出合理判断。
for (int i 1; i s.size() - 1; i) { // 单词之间可能有多个空格// 如果当前字符是空格并且下一个字符不是空格if (s[i] s[i 1] ! ) {// 判定下一个字符是否是小写字母如果是则转换成大写if (s[i 1] a s[i 1] z) {s[i 1] - 32;}// 将下一个字符拼接到结果result中result s[i 1]}
}
六、 代码模块化
由于4.2和4.3中的步骤和代码在本次题目中重复使用因此为了代码简洁和后续的方便维护和修改需要将代码进行模块化操作从而增加代码的复用性和可维护性。
6.1 满足的条件
如果想要定义一个将小写字符转换成大写字符的函数需要满足以下条件
返回类型返回结果是经过转换后的大写字符所以返回类型为char函数名可以自定义这里使用changeChar作为函数的名称形参列表之前的形参列表为空而一般的形参列表通常包括参数类型和参数名称。参数类型表示参数的数据类型可以是内置数据类型例如整数、字符、浮点数等、用户自定义的数据类型。参数名称通常是用来描述参数的有意义的名称可以在函数体内部使用这里接收一个字符作为输入所以形参列表类型为char 参数名称可以用a表示, 引用传递意味着函数可以修改传递给它的参数。
6.2 代码完善
// char代表返回类型changeChar代表函数名称char a表示函数接收一个字符a作为参数
char changeChar(char a) {if (a a a z) a - 32;// 返回类型为char, 最终还要返回areturn a;
}
七、 题目解答
7.1 原始代码
#include iostream
#include string
using namespace std;
int main(){int n;string s;cin n; //输入接收n行getchar(); //从输入中获取一个字符while(n--){getline(cin,s); //接收新的一行string result; //设定结果存储的字符串result//将首字母小写转换为大写if(s[0] a s[0] z){s[0] -32; //大小写之间相差32}//将首字母链接到结果中result s[0];//遍历后续整个字符串for(int i 1; i s.size() - 1; i){//i1即是从第二个字母开始//若当前字符为空格下一个字符不是空格则说明下一个字符是新单词if(s[i] s[i1] ! ){//判定新单词是否为小写若是则转换if(s[i1] a s[i1] z){s[i1] - 32;}//将新首字母链接到结果中result s[i1];}}cout result endl;}}
7.2 改进代码
#include iostream
#include string
using namespace std;//小写字母转换为大写字母的函数
char changeChar(char a){if(a a a z){a - 32;}return a;
}int main(){int n;string s,result;cin n; //输入接收n行getchar(); //从输入中获取一个字符while(n--){result ; //PS该步骤不可缺少//或者均可//string resultgetline(cin,s); //接收新的一行result changeChar(s[0]); // 将s[0]传递到参数进行处理转换成大写字母//遍历后续整个字符串for(int i 1; i s.size() - 1; i){//i1即是从第二个字母开始//若当前字符为空格下一个字符不是空格则说明下一个字符是新单词if(s[i] s[i1] ! ){result changeChar(s[i1]); //将s[i1传递到参数进行处理转换成大写字母}}cout result endl;}} 八、 拓展与延伸 8.1 形参和实参
实参和形参是与函数调用相关的两个很重要的概念用于在函数调用时传递数据和接收数据。
形参是函数定义中声明的参数位于函数的参数列表中。形参的作用是定义函数接受的参数的类型和名称定义的形参只在函数执行期间有效在函数执行完毕后会被销毁。而且它作用的范围作用域仅限于函数体内部因此它们与函数外部的变量名称可以相同而不会发生冲突。
void printSum(int a, int b) { // a和b是传递的形参只在函数体{}中有效int sum a b;cout sum endl;
}
实参是函数调用中传递给函数的具体值或变量实参传递的值必须与函数的形参类型匹配否则会发生类型错误。
int main() {int x 5, y 3;printSum(x, y); // 这里进行了函数调用x和y是实参cout x y endl;return 0;
}
8.2 引用
在声明引用时需要在变量名前使用 符号。引用必须在声明时进行初始化并且一旦初始化就不能改变引用的目标。
int a 10;
int ref a; // 声明并初始化引用为a 当函数传递参数时通常会创建参数的副本。使用引用参数可以避免不必要的参数复制这对于大型数据结构如数组尤其有用因为复制这些数据结构会产生显著的开销。 #include iostream
using namespace std;void changeValue(int a) {a 100; // 修改调用方传递的变量的值
}int main() {int x 10;cout x endl;changeValue(x); // 传递x的引用给函数cout x endl; // x的值被函数修改为100return 0;
}
PS:引用的作用域作用范围通常是在声明它的函数或代码块内超出作用域后引用将无效。