2017-11-08 8 views
0

私は面接の準備をしています私は、次の質問に出くわした候補の体験全体に見ながら:{「Sdjksajd」、「Skjdasjj "、" Bjsdakja "、" Xhudhau "、" Eeeeggg "、" Chrome "}。ライブラリ関数を使用せずにアルファベット順に表示します。私は次のように私の限られた知識を使ってこれをやってみましたので、コーディングで非常によくないよソートアルファベット順で文字列配列 -</p> <p>文字列の配列を考える - C++ 11

: - : 『CHAR [INT]』に無効なタイプが

#include<iostream> 
#include<string> 
using namespace std; 
string selsort(string s); 

string selsort(string s) 
{ 
int i=0,j,k=0; 
string min=&s[i]; 
for(i=0;i<6;i++) 
{ 
    for(j=i+1;j<6;j++) 
    { 
     if(s[j][k]<s[i][k]) 
     { 
      string *temp; 
      min=s[j]; 
      *temp=s[i]; 
      s[i]=s[j]; 
      s[j]=*temp; 
     } 
     else if(s[j][k]=s[i][k]) 
     { 
       while(k<=s[j].length()) 
       { 
       k++; 
       selsort(string s); 
       } 
      } 

     } 
    } 
    return s; 
} 

int main() 
{ 
    int i; 
    string s[6]={"Sdjksajd","Skjdasjj","Bjsdakja","Xhudhau","Eeeeggg","Chrome"}; 

    s=selsort(s); 
    for(i=0;i<6;i++) 
    cout<<s[i]; 
    return 0; 
    } 

は、私はエラー」取得しています配列の添字 "と私のプログラムはそれを動作させるためにはさらに多くの変更が必要だと思う。どのように私はこの質問を解決することができますか?

+0

にすべて一緒にこれを置くことができる「せずに何を表示することはできませんライブラリ関数を使用して "。 –

+0

これは間違いありませんが、ライブラリ関数を使用して文字列要素をソートしたり比較したりすることなく、解決する必要があったと思います。 –

答えて

0

問題は、あなたができるだけでなく使用ライブラリソートすることを指定する一方で、それはあなたがライブラリの並べ替えによってを触発することができないという意味ではありません。

template< class RandomIt, class Compare > 
void sort(RandomIt first, RandomIt last, Compare comp); 

RandomItに余分な制約事項に注意してください。それは(可動型にし、間接参照)ValueSwappableでなければなりません。 、

  • 比較物事
瞬間のために

を再アレンジ

  • もの:配列へのポインタがRandomItで、文字列は

    Swappableは、だから我々は2つの部分を持っていることに注意してくださいCompareがあるとしましょう(後で定義します)

    ソートされた最初の要素が他のすべての要素よりも少ないことです。範囲の最小要素を見つける関数RandomIt min_element(RandomIt first, RandomIt last, Compare comp)を想像できます。このようにして最初の要素を最小値と交換し、残りの範囲で実行することができます。このようにソート次のようになります。

    template< class RandomIt, class Compare > 
    void sort(RandomIt first, RandomIt last, Compare comp) 
    { 
        for (RandomIt it = first; it != last; ++it) 
        { 
         RandomIt min = min_element(it, last, comp); 
         swap(*it, *min); 
        } 
    } 
    

    今、私たちはmin_elementを実装する必要があります。現在の範囲を保持するには、Compareを使用して範囲を調べることができます。

    template< class RandomIt, class Compare > 
    RandomIt min_element(RandomIt first, RandomIt last, Compare comp) 
    { 
        RandomIt min = first; 
        for (RandomIt it = first; it != last; ++it) 
        { 
         if (comp(*it, *min)) { min = it; } 
        } 
        return min; 
    } 
    

    そしてまた、我々は今、私たちは私たちのソート機能を持っているswap

    template< typename T > 
    void swap(T & lhs, T & rhs) 
    { 
        T temp = static_cast<T&&>(lhs); 
        lhs = static_cast<T&&>(rhs); 
        rhs = static_cast<T&&>(temp); 
    } 
    

    を必要とする、私たちはアルファベット順にstd::string Sを比較できるようにする必要があります。幸いにも私たちのために<はこれを行うには、文字列に対して定義されているので、私たちは持っている:

    bool string_less(const std::string & lhs, const std::string & rhs) 
    { 
        return lhs < rhs; 
    } 
    

    私たちは、正しい答えは

    void string_sort(std::string * values, std::size_t count) 
    { 
        sort(values, values + count, string_less); 
    } 
    
  • +0

    ありがとう!私は友人の助けを借りてそれを解決しました。文字列の比較に役立つ文字列比較関数 "bool string_less"が欠落しているようです。 –