|
2鱼币
#include <bits/stdc++.h>
using namespace std;
int main()
{
set<string> dict;
string s,buf;
getline(cin,s);
for(int i=0;i<s.size();i++)
{
if(isalpha(s[i]))s[i]=towlower(s[i]);
else s[i]=' ';
}
stringstream ss(s);
while(ss>>buf) dict.insert(buf);
for(auto it=dict.begin();it!=dict.end();it++)
{
cout<<*it<<endl;
}
}
题目要求:输入一个文本,找出所有不同的单词(连续的字母序列),按字典序从小到大输出,单词不区分大小写。
为什么会wa呢
在你的代码中,有一个小错误导致了WA(Wrong Answer)的结果。问题出在将字符转换为小写字母上。
在C++中, isalpha()函数用于检查字符是否为字母。而 towlower()函数用于将字母字符转换为小写。然而, towlower()函数不能直接作用于普通的 char类型,它只能用于 wint_t类型。
为了解决这个问题,你可以使用C++标准库中的 tolower()函数。这个函数可以处理普通的 char类型,并将字母字符转换为小写。你只需要包含头文件 <cctype>,然后将 s[i]作为参数传递给 tolower()函数即可。
以下是修改后的代码:
- #include <iostream>
- #include <set>
- #include <sstream>
- #include <cctype>
- using namespace std;
- int main()
- {
- set<string> dict;
- string s, buf;
- getline(cin, s);
- for (int i = 0; i < s.size(); i++)
- {
- if (isalpha(s[i]))
- s[i] = tolower(s[i]);
- else
- s[i] = ' ';
- }
- stringstream ss(s);
- while (ss >> buf)
- dict.insert(buf);
- for (auto it = dict.begin(); it != dict.end(); it++)
- {
- cout << *it << endl;
- }
-
- return 0;
- }
复制代码
请尝试使用修改后的代码进行编译和运行,它应该能够正确地找出所有不同的单词,并按字典序从小到大输出。如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!  
|
最佳答案
查看完整内容
在你的代码中,有一个小错误导致了WA(Wrong Answer)的结果。问题出在将字符转换为小写字母上。
在C++中,isalpha()函数用于检查字符是否为字母。而towlower()函数用于将字母字符转换为小写。然而,towlower()函数不能直接作用于普通的char类型,它只能用于wint_t类型。
为了解决这个问题,你可以使用C++标准库中的tolower()函数。这个函数可以处理普通的char类型,并将字母字符转换为小写。你只需要包含头文件,然后将s作为参 ...
|