簡體   English   中英

關於成員函數處的字符串類和out_of_range異常處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM