有没有办法在不使用任何迭代的情况下将字符的字母顺序排列
Is there a way to alphabetize the characters in a string without using any iteration?
我正在尝试编写一个可以字母顺序将字符数组的函数(使用递归(。我无法在此功能中使用任何迭代循环,而我最初的尝试存在缺陷。如果我也不能使用任何内置的函数内置的C ,我想知道此任务的可能性
string alphaSort(string s) {
if (s.length() == 0|| s.length()==1) { //end of string
return s;
}
else {
if (s[0] > s[s.length()-1]) {
char temp = s[s.length() - 1];
s[s.length() - 1]=s[0];
s[0] = temp;
return alphaSort(s.substr(0, s.length() - 1) )+s[s.length() - 1];
}
else {
return s[0]+alphaSort(s.substr(1, s.length() - 1));
}
}
}
这是使用递归的片段,而无需基于气泡排序算法的循环。
void swap(char* src, char* dest) {
char temp = *src;
*src = *dest;
*dest = temp;
}
void foo(string& p, int i=0, int j = 1) {
static int n = p.size();
if (i == n - 2) return; // exit function if the index is total = (entries -2)
if (j > n - 1) {
++i; // increment index i to check next lot
j = i+1;
}
if (p[i] > p[j]) swap(&p[i], &p[j]);
foo(p, i, ++j);
}
int main()
{
string s="zello";
foo(s);
cout << s;
}
这是您想法的变体。
#include <iostream>
using namespace std;
string f(string s) {
if (s.length() < 2)
return s;
string sorted = f(s.substr(1, s.length() - 1));
if (s[0] <= sorted[0])
return string(1, s[0]) + sorted;
else
return f(string(1, sorted[0]) + s[0] + sorted.substr(1, sorted.length() - 1));
}
int main()
{
string s = "yxab";
cout << f(s);
}
相关文章:
- 在这种情况下,我真的复制了字节还是复制了字符?
- 在不使用字符串库的情况下输入字符*
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 如何在不将其转换为 ASCII 字符的情况下显示 QByteArray 的十六进制值
- 整数指针与字符指针的情况下悬空指针
- 有没有办法在不使用任何迭代的情况下将字符的字母顺序排列
- 如何在没有wchar_t的情况下在 c++ 中解码/编码 UTF-8 字符
- 给定一个填充无符号字符**的 C 函数,如何在没有中间副本的情况下用数据填充 std::vector
- 为什么在指针和数组的情况下,字符数组的处理方式不同
- 是否可以超载[]运算符在不定义类的情况下访问特定的字符
- 如何在不定义目标变量大小的情况下逐个字符将字符串变量复制到另一个字符
- 如何在不使用循环的情况下将低字节和高字节的字符数组转换为它们的整数数组
- C++ 在不使用 C 字符串库函数的情况下替换数组中的字符
- 我可以在不复制的情况下将 std::vector 重新解释<char>为 std::vector<无符号字符>吗?
- 如何在不删除任何字符的情况下将字符从字符串中的某个位置移动到其最前面
- 在不使用字符串函数的情况下复制C 中的字符数组
- 在没有字符串或字符帮助的情况下查找数字的反面(例如:2500 reverse 0025)
- 有没有办法在不分配变量的情况下将字符串连接到数字
- 在不使用c++中的库函数的情况下,计算不包括null字符的字符串长度
- 在没有ICU或boost的情况下规范化C++中的unicode字符