用c++写用起泡法将字符串按ASCII码值从小到大排列
时间: 2023-08-10 18:02:42 浏览: 121
以下是用冒泡排序法将字符串按ASCII码值从小到大排列的C++代码:
```c++
#include <iostream>
#include <string>
using namespace std;
void bubbleSort(string& str) {
int len = str.length();
for (int i = 0; i < len - 1; ++i) {
for (int j = 0; j < len - i - 1; ++j) {
if (str[j] > str[j + 1]) {
swap(str[j], str[j + 1]);
}
}
}
}
int main() {
string str;
cout << "Please enter a string: ";
getline(cin, str);
bubbleSort(str);
cout << "Sorted string: " << str << endl;
return 0;
}
```
在上述代码中,我们首先定义一个名为 `bubbleSort` 的函数,该函数接受一个字符串参数并使用冒泡排序法将其按ASCII码值从小到大排列。然后在 `main` 函数中,我们从用户输入中获取一个字符串,调用 `bubbleSort` 函数对其进行排序,并输出排序后的结果。
相关问题
从键盘输入一个字符串,遇到“#”结束。去掉字符串中重复的字符,然后利用冒泡排序法对字符串中的字符按ASCII码值从小到大排序,并输出排序后的结果
当然,我们可以按照以下步骤完成这个任务:
1. 从键盘接收输入字符串直到遇到'#'为止。
2. 去掉字符串中的重复字符。
3. 使用冒泡排序算法对字符串进行排序。
首先,我们需要创建一个辅助函数来判断字符是否重复,以及另一个函数用于冒泡排序。这里使用`std::unordered_set`来快速去除重复字符。下面是完整的C++代码:
```cpp
#include <iostream>
#include <string>
#include <unordered_set>
#include <algorithm>
// 冒泡排序函数
void bubbleSort(std::string& str) {
int n = str.length();
for (size_t i = 0; i < n - 1; ++i) {
for (size_t j = 0; j < n - i - 1; ++j) {
if (str[j] > str[j + 1]) {
std::swap(str[j], str[j + 1]);
}
}
}
}
int main() {
std::string input;
std::cout << "Enter a string (ends with '#'): ";
getline(std::cin, input);
// 去除重复字符
std::unordered_set<char> uniqueChars;
for (char c : input) {
if (c != '#' && uniqueChars.find(c) == uniqueChars.end()) {
uniqueChars.insert(c);
}
}
// 将非'#'字符转换回字符串并排序
std::string result(uniqueChars.begin(), uniqueChars.end());
bubbleSort(result);
std::cout << "Sorted string: " << result << std::endl;
return 0;
}
```
在这个程序中,我们首先读取用户输入的字符串,然后遍历每个字符,只保留第一次出现的不重复字符。接着,我们将剩余的字符放入`std::unordered_set`,因为集合自动去重。然后,我们把集合转回字符串并用冒泡排序算法进行排序。最后,我们输出排序后的字符串。
用c++写输入n个字符,根据ASCII码值的大小,输出其中ASCII值第二大和第二小的字符
可以使用 STL 中的 `vector` 来保存输入的字符,然后排序后输出第二大和第二小的字符即可。具体代码如下所示:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
vector<char> vec;
cout << "请输入n个字符:";
cin >> n;
// 读入n个字符
for (int i = 0; i < n; i++) {
char c;
cin >> c;
vec.push_back(c);
}
// 排序
sort(vec.begin(), vec.end());
// 输出第二小的字符
cout << "ASCII值第二小的字符为:" << vec[1] << endl;
// 输出第二大的字符
cout << "ASCII值第二大的字符为:" << vec[n-2] << endl;
return 0;
}
```
需要注意的是,如果输入的字符数量小于 2,上述代码会导致越界,因此需要根据具体情况进行判断。
阅读全文