如何对字符串数组的每个字符串进行排序
Posted
技术标签:
【中文标题】如何对字符串数组的每个字符串进行排序【英文标题】:How to sort each character string of character string array 【发布时间】:2016-06-22 13:40:05 【问题描述】:我想对字符串数组的每个字符串进行排序,这是我尝试过的代码。
#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);
在这里是一个有效的声明,如果不是应该怎么做?
【问题讨论】:
问题是std::sort()
需要对底层内存进行写访问,目前是一个char字符串文字,你不能在那里改变任何东西。
我可以以某种方式将字符串文字转换为字符数组并将其发送到 _sort_word() 函数吗?
您需要更好的编译器或需要打开警告:coliru.stacked-crooked.com/a/397b8016997e5c95
@saurabhagarwal 如果最大长度为6
,请尝试char str[2][6] = "hello", "world";
。
另见一些关于开始identifier with an underscore
【参考方案1】:
首先,C++ 中的字符串文字具有常量字符数组的类型。所以正确的数组声明应该是这样的
const char *str[] = "hello", "world";
^^^^^
因此,数组元素指向的字符串字面量是不可变的。
您应该至少声明一个二维数组。
这是一个演示程序
#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;
它的输出是
ehllo
dlorw
如果你的编译器不支持基于范围的 for 语句,那么你可以改写
for ( size_t i = 0; i < sizeof( str ) / sizeof( *str ); i++ ) sort_word( str[i] );
【讨论】:
以上是关于如何对字符串数组的每个字符串进行排序的主要内容,如果未能解决你的问题,请参考以下文章