在c中反向字母串一个字符串

时间:2017-02-20 20:09:40

标签: c string

#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函数错误?

3 个答案:

答案 0 :(得分:0)

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

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

这将比较字符的ascii代码。

答案 1 :(得分:0)

为什么不使用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);

答案 2 :(得分:0)

strcmp用于比较char 数组而不是字符本身,可以简单地与>进行比较。

这不是唯一的问题:冒泡排序需要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);
}