2016-06-22 19 views
2

文字列の配列の各文字列を並べ替えたい、ここでは私が試したコードです。代わりに何をすべきではない場合、私は知りたい文字列配列の各文字列を並べ替える方法

#include <iostream> 
#include <algorithm> 

void _sort_word(char *str) 
{ 
    int len = strlen(str); 
    std::sort(str,str+len); // program get stuck here. 
} 
int main() 
{ 
    char *str[] = {"hello", "world"}; 
    for(int i=0;i<2;i++){ 
     _sort_word(str[i]); 
     cout << str[i] << "\n"; 
    } 
} 

sort(str,str+len);は、ここで有効な文ですか?

+4

問題を書くことができます

ehllo dlorw 

ある

#include <iostream> #include <algorithm> #include <cstring> void sort_word(char *s) { size_t l = std::strlen(s); std::sort(s, s + l); } int main() { char str[][6] = { "hello", "world" }; for (auto &s : str) sort_word(s); for (auto &s : str) std::cout << s << std::endl; return 0; } 

です'std :: sort()'は現在の文字列リテラルである基底のメモリへの書き込みアクセスが必要であり、そこに何か変えないでください。 –

+0

文字列リテラルを文字配列に変換して_sort_word()関数に送ることはできますか? –

+1

より良いコンパイラが必要な場合や、警告を出す必要がある場合http://coliru.stacked-crooked.com/a/397b8016997e5c95 – NathanOliver

答えて

6

まず、C++の文字列リテラルには、定数文字配列の型があります。正しい配列宣言は次のようになります

したがって、配列の要素が指す文字列リテラルは不変です。

少なくとも2次元の配列を宣言する必要があります。ここで

は実証プログラムは、その出力はコンパイラが文に基づいて、範囲をサポートしていない場合、あなたは代わりに

for (size_t i = 0; i < sizeof(str)/sizeof(*str); i++) sort_word(str[i]); 
関連する問題