[iHooya]2023年1月31日作业解析
替换单词
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入
输入包括3行, 第1行是包含多个单词的字符串 s; 第2行是待替换的单词a(长度 <= 100); 第3行是a将被替换的单词b(长度 <= 100). s, a, b 最前面和最后面都没有空格.
输出
输出只有 1 行,将s中所有单词a替换成b之后的字符串。
样例输入
You want someone to help you
You
I
样例输出
I want someone to help you
还是用今天课上讲的那个模版
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s = " ", s1 = " ", s2 = " ";//用户输入的字符串,待替换的单词,被替换的单词
vector<string> word;
getline(cin, s);
cin >> s1;
cin >> s2;
s = s + ' ';
int x = 0;
for (int a = 0; a < s.length(); a++) //分割字符的模版
{
if (s[a] == ' ')
{
word.push_back(s.substr(x, a - x));
x = a + 1;
}
}
for (int b = 0; b < word.size(); b++)
{
if (word[b] == s1)
word[b] = s2;
}
for (int a = 0; a < word.size(); a++)
cout << word[a] << " ";
return 0;
}
单词翻转
输入一个句子(一行),将句子中的每一个单词翻转后输出。
输入:只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。
输出:翻转每一个单词后的字符串,单词之间的空格需与原文一致。
样例输入hello world
样例输出olleh dlrow
还是用今天课上讲的那个模版
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s = " ";
vector<string> word;
getline(cin, s);
s = s + ' ';
int x = 0;
for (int a = 0; a < s.length(); a++)
{
if (s[a] == ' ')
{
word.push_back(s.substr(x, a - x));
x = a + 1;
}
}
for (int a = 0; a < word.size(); a++)
{
reverse(word[a].begin(), word[a].end());
cout << word[a] << " ";
}
return 0;
}
统计单词数
一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。
现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。
输入
2 行。
第 1 行为一个字符串,其中只含字母,表示给定单词;
第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
输出
只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。
样例输入
样例 #1:
To
to be or not to be is a question
样例 #2:
to
Did the Ottoman Empire lose its power at that time
样例输出
样例 #1:
2 0
样例 #2:
-1
还是用今天课上讲的那个模版
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s = " ", str = " ";
int index = 0, count = 0;
bool flag = false;
vector<string> word;
getline(cin, str);
getline(cin, s);
s = s + ' ';
for (int a = 0; a < s.length(); a++)
{
if (s[a] >= 'a' && s[a] <= 'z')
s[a] = s[a] - 32;
}
for (int a = 0; a < str.length(); a++)
{
if (str[a] >= 'a' && str[a] <= 'z')
str[a] = str[a] - 32;
}
int x = 0;
for (int a = 0; a < s.length(); a++)
{
if (s[a] == ' ')
{
word.push_back(s.substr(x, a - x));
x = a + 1;
}
}
for (int a = 0; a < word.size(); a++)
if (word[a] == str)
{
count++;
flag = true;
}
if (flag == false)
cout << -1;
else
cout << count << " " << s.find(str);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, r, a[10001], b[10001], num;
void output()
{
num++;//结果有多少种
for (int i = 1; i <= r; i++)
cout << " " << a[i];
cout << endl;
}
void search(int t)
{
int i;
for (i = 1; i <= n; i++)
{
if (b[i] == 0) //数没有被用过
{
a[t] = i;
b[i] = 1; //标记i被用过了
if (t == r)
output();
else
search(t + 1);
b[i] = 0;
}
}
}
int main()
{
cout << "请输入两个数n和r:";
cin >> n >> r;
search(1);//从1开始搜索
cout << "number=" << num << endl;
return 0;
}
出书最多
假定图书馆新进了m(10 ≤ m ≤ 999)本图书,它们都是由n(1 ≤ n ≤ 26)个作者独立或相互合作编著的。假设m本图书编号为整数(1到999),作者的姓名为字母(‘A’到’Z’),请根据图书作者列表找出参与编著图书最多的作者和他的图书列表。
输入
第一行为所进图书数量m,其余m行,每行是一本图书的信息,其中第一个整数为图书编号,接着一个空格之后是一个由大写英文字母组成的没有重复字符的字符串,每个字母代表一个作者。输入数据保证仅有一个作者出书最多。
输出
输出有多行: 第一行为出书最多的作者字母; 第二行为作者出书的数量; 其余各行为作者参与编著的图书编号(按输入顺序输出)。
样例输入
11
307 F
895 H
410 GPKCV
567 SPIM
822 YSHDLPM
834 BXPRD
872 LJU
791 BPJWIA
580 AGMVY
619 NAFL
233 PDJWXK
样例输出
P
6
410
567
822
834
791
233
#include <bits/stdc++.h>
using namespace std;
struct book
{
int number;//书编号属性
string writer;//书的作者属性
};
int main()
{
int n = 0;
cin >> n; //用户输入几本书
book booklist[n];//定义一个结构体数组
int count[26] = {0}; //定义一个“桶子”,用来存放人名(A~Z)26个字母
int max = 0, max_index = 0; //存放最大值,以及最大值的下标位置
for (int a = 0; a < n; a++)
cin >> booklist[a].number >> booklist[a].writer; //输入书的编码和人名
for (int a = 0; a < n; a++)
for (int b = 0; b < booklist[a].writer.length(); b++) //遍历人名
count[booklist[a].writer[b] - 'A']++; //把人名对应成数字(1~26)所对应(A~Z)
for (int a = 0; a < 26; a++) //遍历存放了人名的桶子,求最值。
{
if (count[a] >= max)
{
max = count[a];
max_index = a; //获取到最大值的下标
}
}
cout << (char)(max_index + 'A') << endl << max << endl; //打印人名,打印最多出书次数
for (int i = 0; i < n; i++)
{
for (int j = 0; j < booklist[i].writer.length(); j++)
{
if (booklist[i].writer[j] == (char)(max_index + 'A'))
{
cout << booklist[i].number << endl;
break;
}
}
}
return 0;
}