[英]On the string class at member function and out_of_range exception handling
寫在前面:我的母語不是英語。 我在運行程序時遇到一些問題。 我已經在標題中對此進行了解釋。 此功能用於顯示兩個輸出字符串是否為字母十六進制; 兩個字符串中的字母以相同數量的字母出現的順序可以是任意的,但是兩個字符串不能相同,例如: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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.