![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
C++文字配列ソート関数を教えてください
配列に格納されている文字列をソートして完全一致するかを確認するロジックを作成したいのですが、上手くいきません。ネットなどでいろいろ調べたのですが><
一応、以下に今の状態のソースを貼りました。
class StringSuzeLess
{
public;
bool operator()( const std::string& Ihs, const std::string& rhs ) const
{
retrun ihs.size() < rhs.size();
}
}
int main()
{
// 文字列格納変数
chra str1[10][5+1];
char str2[10][5+1];
// 初期化
memset(str1, 0x00, sizeof(str1));
memset(str2, 0x00, sizeof(str2));
// 文字列設定
strcpy(str1[0], "AAAAA");
strcpy(str1[1], "BBBBB");
strcpy(str1[2], "CCCCC");
strcpy(str2[0], "CCCCC");
strcpy(str2[1], "BBBBB");
strcpy(str2[2], "AAAAA");
std::vector< std::string > vsmozi1;
std::vector< std::string > vsmozi2;
// ベクタに文字列設定
for(short LoopCnt = 0; LoopCnt < 3; LoopCnt++)
{
vsmozi1.push_back( std::string( str1[LoopCnt] ) );
}
for(short LoopCnt = 0; LoopCnt < 3; LoopCnt++)
{
vsmozi2.push_back( std::string( str2[LoopCnt] ) );
}
// ソート
std::stable_sort( vsmozi1.begin(), vsmozi1.end(), StringSuzeLess());
std::stable_sort( vsmozi2.begin(), vsmozi2.end(), StringSuzeLess());
// ソート後の先頭から取得
for(short LoopCnt = 0; LoopCnt < 3; LoopCnt++)
{
// 不一致の場合
if(vsmozi1[LoopCnt] != vsmozi2[LoopCnt])
{
return -1;
}
}
return 0;
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
なぜ、StringSuzeLess::()内で
size()を比較しているのでしょうか?
文字列の長さ順にソートしたいのですか?
全部同じ長さですから、ソート前後で変化無いですよね。
この仕様なのでしょうか?
他にも明らかなミスがあります。
修正したソースを載せます。
文字列順で比較するよう仕様変更しました。
本来の仕様に合致しているか保障の限りではありません。
(長さ順のソートが正しい仕様かも・・・)
//// ここからソース //////////////////////////////////
// ヘッダを追加しました
#include <string>
#include <vector>
#include <algorithm>
class StringSuzeLess
{
public:
// 些細なことですがrhsに対してはl(エル)hsではないでしょうか?
bool operator()( const std::string& lhs, const std::string& rhs ) const
{
//return lhs.size() < rhs.size();
return lhs < rhs;
}
// クラスの終わりにセミコロンがありません
};
int main()
{
// 文字列格納変数
char str1[10][5+1];
char str2[10][5+1];
// 初期化
memset(str1, 0x00, sizeof(str1));
memset(str2, 0x00, sizeof(str2));
// 文字列設定
strcpy(str1[0], "AAAAA");
strcpy(str1[1], "BBBBB");
strcpy(str1[2], "CCCCC");
strcpy(str2[0], "CCCCC");
strcpy(str2[1], "BBBBB");
strcpy(str2[2], "AAAAA");
std::vector< std::string > vsmozi1;
std::vector< std::string > vsmozi2;
// ベクタに文字列設定
for(short LoopCnt = 0; LoopCnt < 3; LoopCnt++)
{
vsmozi1.push_back( std::string( str1[LoopCnt] ) );
}
for(short LoopCnt = 0; LoopCnt < 3; LoopCnt++)
{
vsmozi2.push_back( std::string( str2[LoopCnt] ) );
}
// ソート
std::stable_sort( vsmozi1.begin(), vsmozi1.end(), StringSuzeLess());
std::stable_sort( vsmozi2.begin(), vsmozi2.end(), StringSuzeLess());
// ソート後の先頭から取得
for(short LoopCnt = 0; LoopCnt < 3; LoopCnt++)
{
// 不一致の場合
if(vsmozi1[LoopCnt] != vsmozi2[LoopCnt])
{
return -1;
}
}
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてください。 2 2022/04/22 18:48
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- C言語・C++・C# このプログラミング誰か教えてください 9 2022/04/22 18:50
- Visual Basic(VBA) countifsについての質問 3 2023/03/08 13:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
switch文のエラーについて
-
構造体配列のvectorへの変換と...
-
2次元vectorのerase?
-
空ENTERの判別
-
C++ 平均値、最大値と最小値の...
-
リモートデスクトップの接続元I...
-
#include "fstream.h"
-
string型のフォーマット書式指...
-
C++でのeの近似値の求め方
-
ヘッダーファイルがインクルー...
-
プログラミング言語Cとプログラ...
-
CStringとString
-
boost::regexで、日本語に利用...
-
gccでコンパイル時のエラー
-
opencvを使って画像比較
-
VS2019でofstreamが未定義になる
-
vectorの中にmap
-
2重の(?)の#include
-
VC++で文字列から任意の文字を...
-
プログラミング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構文エラーが出ているのですが...
-
switch文のエラーについて
-
enumの値から定義名を文字列化...
-
VC++で文字列から任意の文字を...
-
なぜ、C++の標準ヘッダをインク...
-
空ENTERの判別
-
std::wstringのメモリリークに...
-
C言語からgnuplot呼び出し
-
リモートデスクトップの接続元I...
-
JPEGやPNGが読めるLoadImage関数
-
このプログラミング誰か教えて...
-
プログラミング
-
#include "fstream.h"
-
C++での <iostream.h>と<iostre...
-
std::map の const 修飾について
-
構造体配列のvectorへの変換と...
-
#defineの使い方について
-
VS2019でofstreamが未定義になる
-
指定した文字を削除したい
-
構造体に決められた文字列を入...
おすすめ情報