在特定排列中连接字符串的字符

时间:2014-10-01 02:58:57

标签: c++ string permutation

我正在尝试编写一个带有5个字符长字符串的C ++程序,然后用这个顺序打印出带有新排列的字符串:第一个字符,第三个字符,第五个字符,第二个字符,第四个字符。我的代码如下:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()

{
string key;
string p10;
cout << "Enter the five characters long string: ";
    cin >> key;
p10 = key[0] + key[2] + key[4] + key[1] + key[3];
cout << p10 << endl;’



system(“pause”);
return 0;

}

每次运行输出(p10)都是一个随机的希腊字母。

请帮忙!

1 个答案:

答案 0 :(得分:2)

这里的问题是,当您在字符串上使用[]时,您不会返回另一个字符串,而是一个charchar实际上只是一个小整数(想想字符代码),如果你使用+运算符,它会将数字加在一起。你最终会得到一个或多或少的随机字符代码,这就是为什么你会得到希腊字母。

如果您希望保持代码结构尽可能接近原始结构,可以使用substr来获取“一个字符串”而不是普通char

key.substr(0, 1) + key.substr(2, 1) + ...

1表示您需要指定偏移量中的一个字符。

另一种方法是首先从字符中构造一个char数组,然后将其转换为字符串:

char p10_arr[] = { key[0], key[2], ... };
string p10(arr, sizeof(arr));

也许最好最简洁的方法是使用初始化列表语法:

string p10 { key[0], key[2], ... };