C++ 功能有什么问题
这个函数应该返回一个单次出现的大写字母C++ 功能有什么问题,c++,C++,这个函数应该返回一个单次出现的大写字母 我试图在30分钟内找出一个错误,但我真的不知道问题出在哪里。谁能看看这个吗 #include <algorithm> #include <string> using namespace std; char singleOccurrence(string str) { transform(str.begin(), str.end(), str.begin(), ::toupper); sort(str.begin(
我试图在30分钟内找出一个错误,但我真的不知道问题出在哪里。谁能看看这个吗
#include <algorithm>
#include <string>
using namespace std;
char singleOccurrence(string str) {
transform(str.begin(), str.end(), str.begin(), ::toupper);
sort(str.begin(), str.end());
for(int i=0; i<str.length(); i++) {
if(i==str.length()-1)
return str[i];
else if(str[i] != str[i+1])
return str[i];
}
}
int main()
{
string str = "ala";
cout << singleOccurrence(str);
}
这个if-else语句
if(i==str.length()-1)
{
return str[i];
}
else
if(str[i] != str[i+1])
{
return str[i];
}
没有道理
例如考虑字符串s= AAB。As s[1]!=s[2]函数将返回字母“a”,尽管它在字符串中出现了多次
或者考虑另一个像AAA这样的字符串。在这种情况下,函数将再次返回字母“a”
如果希望使用具有已排序字符序列的方法,则可以在函数中使用标准容器std::map,而无需对传递的字符串本身进行排序 否则,可以对原始字符串使用嵌套for循环 在这两种情况下,函数应该声明为char singleOccurrence( const std::string &str );
或
例如,如果字符串中没有此类字符,则可以返回字符“\0”
在else语句之后,您应该放置和{,idk,如果这可能是一个问题。其次,if不返回不同的内容,在这两种情况下,您都返回str[i]第三,我没有看到包含iostream库,如果您想使用cout或CIN读取输入,请不要忘记包含。此外,您在main中调用此函数一次,它将在字母排序后始终为您提供第一个字母。您可以尝试使用map,它在map库的STL中实现。在map中,您可以从m该字符串作为键,键值将是出现的次数
我希望这有帮助!:听起来你可能需要学习如何使用调试器来逐步完成代码。有了一个好的调试器,你可以逐行执行你的程序,看看它偏离了你的预期。如果你要做任何编程,这是一个必不可少的工具。进一步阅读:我试图找到一个错误f或者30分钟,我真的不知道。你用了什么技巧来寻找错误?我想看看一些统计数据,询问者声称花了多少时间来寻找问题,30分钟是你应该在调试器中找到的最短时间:i:1,str[i]:'A'str[i+1]:'L'。现在,在ifstr[i]!=str[i+1]上抢夺一笔{return str[i];}.Spoiler:return str[i+1];无法修复它。@Bathsheba我大体上同意,但str[str.size]为元素提供std::string::c_str所需的“\0”不是事实吗?在这种特殊情况下,它甚至可以工作,尽管我在生产性工作中不会依赖它。
char singleOccurrence( std::string_view str );
if(i==str.length()-1)
{
return str[i];
}
else
if(str[i] != str[i+1])
{
return str[i];
}
}
#include <algorithm>
#include <iostream>
#include <string>
#include <map>
using namespace std;
// char singleOccurrence(string str)
// {
// transform(str.begin(), str.end(), str.begin(), ::toupper);
// sort(str.begin(), str.end());
// for(int i=0; i<str.length(); i++)
// {
// if(i==str.length()-1)
// {
// return str[i];
// }
// else
// if(str[i] != str[i+1])
// {
// return str[i];
// }
// }
// }
int main()
{
map<char, int> occurrences;//declare a map, your key will be a char and you key value an int
string str="ala";
for(int i = 0; i < str.length(); i++){
occurrences[str[i]]++;
}
for(auto n : occurrences){
cout<<n.first<<" "<<n.second<<endl;//n will be an iterator, you use iterators to get map values
}//if you want to check the number and show only the letter with a single occurrence just add an if statement and check in key value (n.second) is equal to one
}