您的位置:首页 > 编程语言 > C语言/C++

[土狗之路]Coursera C++第10周作业(上)

2016-01-19 19:12 344 查看
这周作业有八道题,所以分为上下两部分。

先来第一题:


编程题#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: