为什么会没有输出呢
#include <bits/stdc++.h>using namespace std;
//先将单词初始化,变成小写,然后进行排序
string repr(const string &s)
{
string ans=s;
for(int i=0;i<ans.size();i++)
{
ans=tolower(ans);
}
sort(ans.begin(),ans.end());
return ans;
}
int main()
{
int n=0;
string s;
vector<string>words;
map<string,int> cnt;
while(cin>>s)
{
if(s='#')break;
words.push_back(s);//保留原来的字符串
string t=repr(s);
if(!cnt.count(t))cnt=0;//如果没有查找到了,将其默认为0
//跟Python的字典一样,键是唯一的,count是查找键的个数,由于键只存在一个,所以最大也只能为1
cnt++;
}
vector<string> a;
for(int i=0;i<words.size();i++)
{
if(cnt)]==1) a.push_back(words);
}
sort(a.begin(),a.end());//还要排序
for(auto i:a)
{
cout<<i<<endl;
}
}
紫书上的一道题目 这段代码的作用是读取一系列单词,并按照一定规则进行处理和排序,最后输出只出现一次的单词。
在这段代码中,可能会出现没有输出的情况是因为输入的单词中没有以"#"开头的单词。在while循环中,当输入的单词以"#"开头时,会跳出循环,而不再继续读取和处理单词。如果输入的单词中没有以"#"开头的单词,那么while循环内的代码将不会执行,导致最后没有输出。
如果想要保证有输出,可以在输入的单词中加入以"#"开头的单词,或者修改代码,在while循环结束后添加一个判断,如果没有输出的单词,则输出一个提示信息。例如:
if(a.empty()) {
cout << "没有只出现一次的单词" << endl;
} else {
for(auto i:a) {
cout << i << endl;
}
}
这样就可以在没有只出现一次的单词时输出提示信息。 以下是修改过的代码:
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
// 先将单词初始化,变成小写,然后进行排序
string repr(const string& s) {
string ans = s;
for (int i = 0; i < ans.size(); i++) {
ans = tolower(ans);
}
sort(ans.begin(), ans.end());
return ans;
}
int main() {
int n = 0;
string s;
vector<string> words;
map<string, int> cnt;
while (cin >> s) {
if (s == '#')
break;
words.push_back(s); // 保留原来的字符串
string t = repr(s);
if (!cnt.count(t))
cnt = 0; // 如果没有查找到了,将其默认为0
cnt++;
}
vector<string> a;
for (int i = 0; i < words.size(); i++) {
if (cnt)] == 1)
a.push_back(words);
}
sort(a.begin(), a.end()); // 还要排序
for (auto i : a) {
cout << i << endl;
}
return 0;
}
这个程序的功能是从标准输入中读取单词,并按照一定规则进行处理和排序后输出。它使用了vector存储单词,使用map来统计每个单词的出现次数,使用sort函数对结果进行排序。
希望这个回答对你有帮助。如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]