#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函数错误?
答案 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);
}