我必须制定可以按字典顺序排列给定字符串的算法。 酸苹果香蕉收购猫作物螃蟹电力猫 ->酸获得苹果香蕉猫猫螃蟹的作物力 像这样...
index.php
我的想法是将给定字符串的每个字母更改为数字,例如a-> 1 b-> 2,... z-> 26; 然后,从第一个字母开始,它将比较数字的顺序... 再一次,我将数字改为字母。但是它的输出是错误的... 我认为这看起来没错...哪里错了?在此处输入代码
答案 0 :(得分:1)
std::sort
允许对STL中的所有合适容器进行轻松排序,例如std::list
或std::vector
。您可以向其提供一个定义小于关系的函数,该函数用于比较它们。
示例:
#include <string>
using std::string;
#include <vector>
using std::vector;
#include <algorithm>
using std::sort;
using std::min;
#include <iostream>
using std::cout;
using std::endl;
bool smaller_than(const string& a, const string& b)
{
for(size_t i=0; i<min(a.length(), b.length()); i++)
{
if(a[i] < b[i]) return true;
if(a[i] > b[i]) return false;
}
return a.length() < b.length();
}
int main()
{
vector<string> data = {"xyz", "aaa", "dg", "egseg", "xyyyyyy", "a", "z", "A", "Z" };
sort(data.begin(), data.end(), smaller_than);
for(const string& datum : data)
{
cout << datum << endl;
}
return 0;
}
这将返回
A
Z
a
aaa
dg
egseg
xyyyyyy
xyz
z
请注意,smaller_than
在此处可以具有不同的代码,使您可以根据需要调整比较。
如果省略smaller_than
,则表示您写
sort(data.begin(), data.end());
它将使用当前排序类型的<运算符,在这种情况下为string::operator<
。在此示例中,此操作应相同(尽管未进行准确检查),但我想包含这样的函数以提供给您方便的工具。例如,如果您希望苹果,斑马和斑马的顺序不是“斑马,苹果,斑马”而是“苹果,斑马,斑马”,则可以相应地修改比较功能。
关于您的代码的一些提示:
学习使用STL,char数组几乎是C。在C ++中,您使用某种字符串类,例如std::string
,或某种其他库的类,例如{{1} }。
将您的代码划分为某种模块,例如函数。您甚至可以在C风格的过程编程中执行此操作。现在,您有一堆for循环,这些循环会执行需要仔细阅读的操作,而不是附加名称。
答案 1 :(得分:0)
实现此目标的最佳方法是使用向量,排序和字符串。您可以在向量中输入字符串,如下所示:
string s;
vector<string> v;
while (cin >> s)
v.push_back(s);
然后使用以下命令进行排序:
sort(v.begin(), v.end());
答案 2 :(得分:0)
在C ++中,您只能使用内置的std::sort
函数,但是所有字符串必须仅包含小写/大写字母。您可以将值存储在某些STL容器上,例如std::vector
,然后使用std::sort
和begin()
迭代器调用end()
。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
int n;
std::cin >> n;
std::vector<std::string> v;
while (n--) {
std::string s;
std::cin >> s;
v.push_back(s);
}
std::sort(v.begin(), v.end());
for(auto it : v ) std::cout << it << std::endl;
}