#include <stdio.h> fun(char *p) { char max, *q; int i = 0; max = p[i]; while (p[i] != 0) { if (max < p[i]) { max = p[i]; /********found********/ q = p+i } i++; } /********found********/ wihle (q > p) { *q = *(q-1); q--; } p[0] = max; } void main() { char str[80]; gets(str); fun(str); puts(str); }
时间: 2023-08-03 18:07:44 浏览: 100
这段代码的功能是将输入的字符串中的最大字符移到字符串的开头,并将其余字符向后移动一位。
具体实现方式是通过指针遍历字符串中的每一个字符,找到其中最大的字符,并记录其指针位置。然后从该位置开始,将其前面的字符全部向后移动一位,最后将最大字符放到字符串的开头。最终输出移动后的字符串。
需要注意的是,原始代码中的第一个函数定义缺少返回值类型,应该改为 `void fun(char *p)`,否则会产生编译错误。另外,在第 11 行中,将找到的最大字符的指针位置保存在了变量 `q` 中,但是在之后的移动过程中,该指针位置没有被更新,应该在移动过程中将 `q` 指针向前移动一位,否则会发生错误。因此,第 11 行应该改为 `q = p + i;`,第 15 行应该改为 `while (q > p + 1)`,第 17 行应该改为 `q--;`。
相关问题
//求最大字符串 #include<string.h> #include<stdio.h> char* fun(char word[][10],int n) { //********begin***********// //*******end************// } int main(void) { int i; char color[5][10] = {"red", "blue", "yellow", "green", "black" }; char *maxstr; maxstr=fun(color,5); for(i = 0; i < 5; i++) { printf("%s\n", color[i]); } printf("\nthe max is: %s\n", maxstr); return 0; }
这段代码中,函数`fun`的作用是找到二维字符数组`word`中长度最长的字符串,并返回该字符串的地址。
下面是完整的代码实现:
```c
#include <string.h>
#include <stdio.h>
char* fun(char word[][10], int n) {
int max_len = 0;
char* max_str = word[0];
for (int i = 0; i < n; i++) {
int len = strlen(word[i]);
if (len > max_len) {
max_len = len;
max_str = word[i];
}
}
return max_str;
}
int main(void) {
int i;
char color[5][10] = {"red", "blue", "yellow", "green", "black" };
char* maxstr;
maxstr = fun(color, 5);
for (i = 0; i < 5; i++) {
printf("%s\n", color[i]);
}
printf("\nthe max is: %s\n", maxstr);
return 0;
}
```
在函数`fun`中,我们首先定义了一个变量`max_len`用来记录目前找到的最长字符串的长度,以及一个指针`max_str`来指向目前找到的最长字符串。接着,我们遍历整个二维字符数组`word`,对于每个字符串,我们都计算其长度,如果其长度比`max_len`还大,就更新`max_len`和`max_str`。最后,函数返回`max_str`。
在`main`函数中,我们定义了一个二维字符数组`color`,并初始化了其中的五个元素。然后,我们调用`fun`函数来找出其中长度最长的字符串,并将返回的地址赋值给指针变量`maxstr`。最后,我们输出整个二维字符数组以及找到的最长字符串。
请编写函数fun,对长度为7个字符的字符串,除首,尾字符外,其余5个字符按ASCII码降序排列。 #include <stdio.h> #include <string.h> void fun(char *s,int num) { } void main() { char s[10]; gets(s); fun(s,7); printf("%s", s); }
这道题目需要编写一个函数,对长度为7个字符的字符串,除首、尾字符外,其余5个字符按ASCII码降序排列。由于字符串中只有7个字符,因此可以使用选择排序的方法,每次选择最大的字符放到指定位置,最终得到排好序的字符串。
具体实现如下:
```c
#include <stdio.h>
#include <string.h>
void fun(char *s, int num) {
int i, j, max_index;
char temp;
for (i = 1; i < num - 1; i++) { // 从第二个字符开始,到倒数第二个字符结束
max_index = i;
for (j = i + 1; j < num - 1; j++) { // 从下一个字符开始,到倒数第二个字符结束
if (s[j] > s[max_index]) { // 找到比当前字符大的最大字符
max_index = j;
}
}
if (max_index != i) { // 将最大字符与当前字符交换
temp = s[i];
s[i] = s[max_index];
s[max_index] = temp;
}
}
}
void main() {
char s[10];
gets(s);
fun(s, 7);
printf("%s", s);
}
```
在函数 `fun` 的实现中,变量 `i` 从第二个字符开始,到倒数第二个字符结束;变量 `j` 从下一个字符开始,到倒数第二个字符结束。每次在区间 `[i+1, num-2]` 中选择最大的字符,并将其与第 `i` 个字符交换。最终得到的字符串就是除首、尾字符外,其余5个字符按ASCII码降序排列的结果。
阅读全文