#include <stdio.h> void main() { char str[80], i, j; void swap(char* pa, char* pb); gets(str); //************Begin*********** int a;//a为str长度 for (a = 79; a >= 0; a--) if (str[a] != '\0') { a++; break; } //引入m n进行冒泡排序 int m,n; char* p1=&i, * p2=&j; for(m = 0; m < a; m++) for (n = 1; n < a - m; n++) { //利用指针进行字符对换 i = str[n]; j = str[n - 1]; if (i<j) //后项小于前项时 { swap(p1, p2); } //此时i和j内数据调换 重新赋值回str的n和n-1位 str[n] = i; str[n - 1] = j; } //************End*********** printf("%s\n", str); //输出排序后的字符串 } void swap(char* pa, char* pb) //两字符交换 { //************Begin*********** char ch; ch = *pa; //ch值 赋值 为pa指针指向数据 对应i的数据 即原str[n] *pa = *pb;//pa指针指向数据 即i的数据 赋值 为j内数据 i数据变为原str[n-1] *pb = ch; //pb指针指向数据 即j的数据 赋值 改为ch内的数据 j变为原str[n] //此时*pa和*pb对应变量i和j的数据 变为原来j和i 实质交换内容 //************End*********** }
时间: 2023-08-22 11:07:02 浏览: 109
这段代码实现了对输入字符串进行冒泡排序的功能。代码分析如下:
1. 定义了一个 `str` 数组来存储输入的字符串,同时定义了 `i` 和 `j` 两个字符变量,和一个 `swap()` 函数来交换两个字符指针所指向的字符值。
2. 使用 `gets()` 函数读取用户输入的字符串。
3. 计算出字符串的长度 `a`,并且为了避免字符串中存在空字符而导致计算错误,使用一个循环从后往前找到第一个非空字符,并将其后面的位置赋值给 `a`。
4. 使用两个嵌套的循环对字符串进行冒泡排序。在内层循环中,使用两个指向 `i` 和 `j` 的指针 `p1` 和 `p2`,将相邻的两个字符进行比较,如果后面的字符小于前面的字符,则调用 `swap()` 函数交换它们的值。
5. 在 `swap()` 函数中,使用一个中间变量 `ch` 来存储第一个字符指针 `pa` 所指向的字符值,然后将 `pa` 所指向的字符值替换为第二个字符指针 `pb` 所指向的字符值,最后将 `pb` 所指向的字符值替换为 `ch`,即完成了两个字符值的交换。
6. 最后使用 `printf()` 函数输出排序后的字符串。
需要注意的是,该程序使用了不安全的 `gets()` 函数来读取用户输入的字符串,可能会发生缓冲区溢出等安全问题。建议使用安全的字符串输入函数 `fgets()` 来代替 `gets()`。
阅读全文