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

Concatenating characters of a string in a specific permutation

本文关键字:字符串 字符 连接 排列      更新时间:2023-10-16

我正在尝试编写一个C++程序,该程序使用一个5个字符长的字符串,然后按以下顺序打印出具有新排列的字符串:第1个字符、第3个字符、5个字符、2个字符、4个字符。我的代码如下:

#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)都是一个随机的希腊字母。

请帮忙!

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

如果你想让代码的结构尽可能接近原始代码,你可以使用substr来获得"一个字符串",而不是普通的char s:

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], ... };