【问题标题】:reverse-alphabetizing a string in c在c中对字符串进行反向字母排序
【发布时间】:2017-02-21 04:33:22
【问题描述】:
#include <stdio.h>
#include <string.h>

int main(void)
{
int i, temp;
char input[50];

printf("Enter a string: \n");
scanf("%s", input);

for(i=0; input[i] != '\0'; i++) {
    if(strcmp(input[i], input[i+1])<0) {
        temp=input[i];
        input[i]=input[i+1];
        input[i+1]=temp;
        }
    }
printf("%s\n", input);
return(0);
}

我应该编写一个程序,将用户输入的字符串的字符按字母倒序排序。我认为我错误地使用了 strcmp 函数?

【问题讨论】:

  • 除非您发明了具有O(n) 复杂度的冒泡排序算法,否则您需要 2 个循环来进行这种排序。

标签: c string


【解决方案1】:

您正在比较字符,您不需要使用strcmp 来比较以空字符结尾的字符数组。

一个简单的input[i] == input[i+1] 就可以了。

这将比较字符的ASCII码。

【讨论】:

  • 复制/粘贴评论:除非您发明了具有O(n) 复杂度的冒泡排序算法,否则您需要 2 个循环来进行这种排序。输入acbac,循环将不足以将最后一个c 移动到第二个位置。
  • 除此之外,他无缘无故地使用strcmp
  • 对,但是根据您的输入,OP 仍然无法正确执行排序。
【解决方案2】:

strcmp用来比较chararrays而不是chars本身,可以简单的和&gt;比较。

这不是唯一的问题:冒泡排序需要 2 个循环(O(n**2) 复杂度),因此即使使用比较修复,您的循环也不会完全排序。例如,输入acbac,一个循环不足以将最后一个c 移动到第二个位置,因为它只交换一次相邻元素。

这是一个完成这项工作的实现,使用双循环(在内循环中有一半字符串)和正确的char 比较。

#include <stdio.h>
#include <string.h>

int main(void)
{
int i,j, temp;
char input[50];

printf("Enter a string: \n");
scanf("%49s", input);

for(i=0; input[i] != '\0'; i++) {
   for(j=i+1; input[j] != '\0'; j++) {
    if (input[i] < input[j]) {
        temp=input[i];
        input[i]=input[j];
        input[j]=temp;
        }
    }
}
printf("%s\n", input);
return(0);
}

【讨论】:

    【解决方案3】:

    为什么不使用 qsort?

    int compareFunction(const void *a, const void *b) {
        char char1 = 0[(char *) a];
        char char2 = 0[(char *) b];
        if (char1 > char2) return -1;
        if (char1 == char2) return 0;
        if (char1 < char2) return 1;
    }
    
    ....
    
    qsort(input, strlen(input), 1, compareFunction);
    

    【讨论】:

    • 你真的写0[(char *) a]吗? *(char *) a 更具可读性。
    • 是的,我的编码风格很奇怪。
    • qsort(input, 1, 1, compareFunction); 无效。
    • 字母倒序
    猜你喜欢
    • 1970-01-01
    • 2018-11-20
    • 2021-09-17
    • 2015-07-23
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    相关资源
    最近更新 更多