【问题标题】:Concatenating characters of a string in a specific permutation以特定排列连接字符串的字符
【发布时间】:2014-11-25 19:49:27
【问题描述】:

我正在尝试编写一个 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) 都是一个随机的希腊字母。

请帮忙!

【问题讨论】:

  • string key;不应该是char[] key;吗?

标签: c++ string permutation


【解决方案1】:

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

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

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

【讨论】:

  • 太棒了。非常感谢!做到了。我以前从未在 C++ 上尝试过字符串操作。也感谢您的解释,更有意义!
  • 最后一种方法,最好最简洁的方法,在左大括号上显示语法错误,说它需要分号?
  • @bblo:这可能是由于 C++ 编译器过时或配置错误,在 C++11 中添加了初始化列表语法。您可能需要单独告诉编译器启用 C++11 功能或升级它或两者兼而有之。
  • 我查找了如何做到这一点。看起来我需要使用 VS 2012 才能工作。
猜你喜欢
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多