在字符串类上的成员函数和out_of_range异常处理

On the string class at member function and out_of_range exception handling

本文关键字:out of range 异常处理 函数 字符串 成员      更新时间:2023-10-16

写在前面: 我的母语不是英语。我在运行程序时遇到一些问题。这在我的标题中已经解释过了。此函数用于显示两个输出字符串是否为字母十六进制;两个字符串的字母出现在相同数量的字母中的顺序可以是任意的,但两个字符串不能相同 eg:slient 和 lisent 是异位的( 这是我的代码:

#include<iostream>
#include<string>
using namespace std;
bool LetterChange(string s1,string s2);
int main()
{
string s1, s2;
cin >> s1;
cin >> s2;
if (LetterChange(s1, s2) == true)
cout << "ok" << endl;
else
cout << "not ok " << endl;
return 0;
}
bool LetterChange(string s1, string s2)
{
unsigned k = 0;
if (s1.size() == s2.size())
{
if (s1.compare(s2) != 0)
{
unsigned i = 0;
unsigned j = 0;
while( i < s1.size())
{
for(unsigned j=0;j < s2.size();)
{
if (s1.at(i) == s2.at(j) )
{
++i;
++k;
}
else
++j;
}
}
if (k == s1.size())
return true;
else
return false;
}
else
return false;
}
else
return false;
}

虽然我的话很尴尬,但谢谢你的观察和回答。

我知道您想检查在两个相同长度的单词中是否有相同的字母,但顺序不同?您可以通过检查一个单词的每个字母是否出现在第二个单词中来更轻松地做到这一点:

#include<iostream>
#include<string>
using namespace std;
bool LetterChange(string s1,string s2);
int main()
{
string s1, s2;
cin >> s1;
cin >> s2;
if (LetterChange(s1, s2) == true)
cout << "ok" << endl;
else
cout << "not ok " << endl;
return 0;
}
bool LetterChange(string s1, string s2)
{
//at the beginning check if they are the same of the size does not agree
if(s1 == s2 or s1.size()!= s2.size()) return false;   
else{
//for every letter in s1, check if it appears in s2
for(auto letter : s1){  
//if some letter does not appear, we should return false 
if(s2.find(letter)==string::npos) return false;
}
//if all letters from s1 appear in s2, return true
return true;
}
}

输出为:

listen
sliten
ok
listen
listen
not ok
listeen
listen
not ok