[土狗之路]Coursera C++第10周作业(上)
2016-01-19 19:12
344 查看
这周作业有八道题,所以分为上下两部分。
先来第一题:
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
注意: 总时间限制: 1000ms 内存限制: 65536kB
在一个字符串中找出元音字母a,e,i,o,u出现的次数。
输入一行字符串(字符串中可能有空格,请用cin.getline(s,counts)方法把一行字符串输入到字符数组s中,其中counts是s的最大长度,这道题里面可以直接写80。),字符串长度小于80个字符。
输出一行,依次输出a,e,i,o,u在输入字符串中出现的次数,整数之间用空格分隔。
注意,只统计小写元音字母a,e,i,o,u出现的次数。
这道题貌似简单粗暴的解决就可以了:
然后来下一道题:
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
注意: 总时间限制: 1000ms 内存限制: 65536kB
一般我们用strcmp可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止。如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。但在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如"Hello"和"hello"在忽略字母大小写时是相等的。请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。
输入为两行,每行一个字符串,共两个字符串。(请用cin.getline(s,80)录入每行字符串)(每个字符串长度都小于80)
如果第一个字符串比第二个字符串小,输出一个字符"<"
如果第一个字符串比第二个字符串大,输出一个字符">"
如果两个字符串相等,输出一个字符"="
注意,只统计小写元音字母a,e,i,o,u出现的次数。
strcmp的实现如下,结果用result保存。
接着来第三题:
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
注意: 总时间限制: 1000ms 内存限制: 65536kB
一个以'.'结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式
一个以'.'结尾的简单英文句子(长度不超过500),单词之间用空格分隔,没有缩写形式和其它特殊形式
该句子中最长的单词。如果多于一个,则输出第一个
直接来代码吧:
这么写的好处是不需要创建第二个数组储存最长单词,就能解决为题。
第四题
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
注意: 总时间限制: 1000ms 内存限制: 65536kB
在main函数中, 生成一个5*5的矩阵,输入矩阵数据,并输入n,m的值。判断n,m是否在数组范围内,如果不在,则输出error;如果在范围内,则将n行和m行交换,输出交换n,m后的新矩阵。
5*5矩阵的数据,以及n和m的值。
如果不可交换,则输出error
如果可交换,则输出新矩阵
输出error格式如下:
cout<< "error" << endl;
输出矩阵格式如下:
cout<< setw(4)<< num;
输出矩阵一行后要输出cout<< endl;
setw是iomanip库里定义的格式控制操作符,需要#include <iomanip> 包含这个头文件。
先来第一题:
编程题#1:求字母的个数
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)注意: 总时间限制: 1000ms 内存限制: 65536kB
描述
在一个字符串中找出元音字母a,e,i,o,u出现的次数。
输入
输入一行字符串(字符串中可能有空格,请用cin.getline(s,counts)方法把一行字符串输入到字符数组s中,其中counts是s的最大长度,这道题里面可以直接写80。),字符串长度小于80个字符。
输出
输出一行,依次输出a,e,i,o,u在输入字符串中出现的次数,整数之间用空格分隔。
样例输入
If so, you already have a Google Account. You can sign in on the right.
样例输出
5 4 3 7 3
提示
注意,只统计小写元音字母a,e,i,o,u出现的次数。这道题貌似简单粗暴的解决就可以了:
#include<iostream> using namespace std; int main() { char s[80]; cin.getline(s, 80); int a = 0; int e = 0; int i = 0; int o = 0; int u = 0; for (int j = 0; j < 80; j++) { if (s[j] == 'a' ) a++; if (s[j] == 'e' ) e++; if (s[j] == 'i' ) i++; if (s[j] == 'o' ) o++; if (s[j] == 'u' ) u++; } cout << a << ' ' << e << ' ' << i << ' '<< o <<' '<< u << endl; return 0; }
然后来下一道题:
编程题#2:忽略大小写比较字符串大小
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)注意: 总时间限制: 1000ms 内存限制: 65536kB
描述
一般我们用strcmp可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止。如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。但在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如"Hello"和"hello"在忽略字母大小写时是相等的。请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。
输入
输入为两行,每行一个字符串,共两个字符串。(请用cin.getline(s,80)录入每行字符串)(每个字符串长度都小于80)
输出
如果第一个字符串比第二个字符串小,输出一个字符"<"如果第一个字符串比第二个字符串大,输出一个字符">"
如果两个字符串相等,输出一个字符"="
样例输入
第一组 Hello hello 第二组 hello HI 第三组 hello HELL
样例输出
第一组 = 第二组 < 第三组 >
提示
注意,只统计小写元音字母a,e,i,o,u出现的次数。strcmp的实现如下,结果用result保存。
int i = 0; char result; while (s1[i] != '\0' && (s1[i] == s2[i])){ i++; } if (s1[i] > s2[i]) { result = '>'; } else if (s1[i] < s2[i]) { result = '<'; } else{ result = '='; }
#include <stdio.h> #include <string.h> #include<iostream> using namespace std; int main() { char str1[80]; char str2[80]; cin.getline(str1, 80); cin.getline(str2, 80); for (int i = 0; i < 80; i++) { if (str1[i] >= 'A'&&str1[i] <= 'Z') str1[i] = str1[i] + 32;//对于ACSⅡ码而言,大写字母是从65(A)到90(Z), //小写字母是从97(a)到122(z),所以大写字母+32就变成了与其对应的小写字母。 if (str2[i] >= 'A'&&str2[i] <= 'Z') str2[i] = str2[i] + 32; } int i = 0; char result; if (strcmp(str1, str2) == 0) result = '='; if (strcmp(str1, str2) > 0) result = '>'; if (strcmp(str1, str2) <0) result = '<'; cout << result << endl; return 0; }
接着来第三题:
编程题#3:最长单词2
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)注意: 总时间限制: 1000ms 内存限制: 65536kB
描述
一个以'.'结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式
输入
一个以'.'结尾的简单英文句子(长度不超过500),单词之间用空格分隔,没有缩写形式和其它特殊形式
输出
该句子中最长的单词。如果多于一个,则输出第一个
样例输入
第一组 I am a student of Peking University. 第二组 Hello world.
样例输出
第一组 University 第二组 Hello
直接来代码吧:
#include<iostream> using namespace std; int main() { char input[500]; cin.getline(input, 500); int end = 0;//这个用来标记最大单词结尾在字符数组中的位子 int count = 0;//这个用来数每个单词的长度 int longest = 0;//用来记录当前所找到的最长单词的长度 int i = 0; while (i < 500) { if (input[i] != ' '&&input[i] != ','&&input[i] != '.') { count++; i++; if (count > longest) {//如果这里是》=,那么如果有相同长度的单词,就会打印最后面的。 longest = count; end = i; } } if (input[i] == ' ' || input[i] == ',' ) { count = 0; i++; } if (input[i] == '.'|| input[i] == '\0' ) break; } for (int j = end - longest; j < end; j++) { cout << input[j];//end-longest就是最长单词的开始位子,然后输出整个单词。 } cout << endl; return 0; }
这么写的好处是不需要创建第二个数组储存最长单词,就能解决为题。
第四题
编程题#4:矩阵交换行
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)注意: 总时间限制: 1000ms 内存限制: 65536kB
描述
在main函数中, 生成一个5*5的矩阵,输入矩阵数据,并输入n,m的值。判断n,m是否在数组范围内,如果不在,则输出error;如果在范围内,则将n行和m行交换,输出交换n,m后的新矩阵。
输入
5*5矩阵的数据,以及n和m的值。
输出
如果不可交换,则输出error如果可交换,则输出新矩阵
样例输入
第一组 1 2 2 1 2 5 6 7 8 3 9 3 0 5 3 7 2 1 4 6 3 0 8 2 4 0 4 第二组 1 2 2 1 2 5 6 7 8 3 9 3 0 5 3 7 2 1 4 6 3 0 8 2 4 5 1
样例输出
第一组 3 0 8 2 4 5 6 7 8 3 9 3 0 5 3 7 2 1 4 6 1 2 2 1 2 第二组 error
提示
输出error格式如下:cout<< "error" << endl;
输出矩阵格式如下:
cout<< setw(4)<< num;
输出矩阵一行后要输出cout<< endl;
setw是iomanip库里定义的格式控制操作符,需要#include <iomanip> 包含这个头文件。
#include<iostream> #include<iomanip> using namespace std; int main() { char input[5][5]; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { cin >> input[i][j]; } } int m, n; cin >> m >> n; if ((m >= 0 && m <= 4) && (n >= 0 && n <= 4)) {//在交换区间内 for (int i = 0; i < 5; i++) { if (i == m&&i!=n) { for (int j = 0; j < 5; j++) { cout << setw(4) << input [j];//如果到了第m行,打印出n行的值就得了 } cout << endl; } if (i == n&&i!=m) { for (int j = 0; j < 5; j++) { cout << setw(4) << input[m][j];//同理,n行打印m行的值 } cout << endl; } if (i != m&&i != n) { for (int j = 0; j < 5; j++) { cout << setw(4) << input[i][j];//正常输出该行值 } cout << endl; } if (i == m&&m == n) {//如果m==n,那么交换没交换其实就没区别了 for (int j = 0; j < 5; j++) { cout << setw(4) << input[i][j]; } cout << endl; } } } else cout << "error" << endl;//如果输出的m,n不合法,直接报错就行了 return 0; }
相关文章推荐
- c/c++变量学习总结
- C++ 学习笔记(一些新特性总结3)
- C++ 学习笔记(一些新特性总结3)
- C/C++函数指针声明
- C++学习之继承篇一(继承权限)
- 编译器对齐机制——由一道求C++类大小的题说开
- 解析C++中四种强制类型转换的区别详解
- C++相关的复习
- C++: std::string 与 Unicode 如何结合?
- 学习历程《C语言陷阱和缺陷》
- Rcpp简明入门
- 详解C++编程中一元运算符的重载
- C++设计模式——享元模式
- C++中#define、typedef和const的区别
- 详解在C++中显式默认设置的函数和已删除的函数的方法
- 类的组合和继承
- C++经典面试题
- Java内存模型FAQ(二) 其他语言,像C++,也有内存模型吗?
- 改善程序与设计的55个具体做法之一:视C++为语言联邦
- operator new在C++中的各种写法