作为一项学校作业,我们正在编写一个泡泡分类程序。我写的代码有效。唯一的事情是输出返回输入并且不返回交换的输入。我有点卡住了。无论我做什么,我都会得到错误或没有任何改变。有人知道出了什么问题吗?任何帮助将非常感谢!!
#include <stdio.h>
#include <string.h>
#define MAXLENGTH 100
void getString(char *str);
void printResult(char *str);
int greaterThan(char ch1, char ch2);
void swap(char *str, int index1, int index2);
int main(void) {
int len; // length of the entered string
char str[MAXLENGTH]; // input should be no longer than MAXLENGTH
getString(str);
len = strlen(str); // get length of the string, from sting.h
int j;
for (j = 0; j < len-j; j++) {
int i;
for (i = 0; i < len-j; i++){
char ch1 = str[i];
char ch2 = str[i+1];
if (greaterThan(ch1, ch2)) {
swap(str, i, i+1); // swap char 1
swap(str, i, i+1); // swap char 2
}
}
}
printResult(str);
return(0);
}
void getString(char *str) {
printf("Enter the string you would like to sort: ");
scanf("%s",str);
}
void printResult(char *str){
printf("Here is the sorted string: ");
printf("%s",str);
}
int greaterThan(char ch1, char ch2){
return (ch1 > ch2);
}
void swap(char *str, int index1, int index2){
char h = str[index1];
str[index1] = str[index2];
str[index2] = h;
}
答案 0 :(得分:2)
试试这个:
getString(str);
len = strlen(str); // get length of the string, from sting.h
int j;
for (j = 0; j < len-j; j++) {
int i;
for (i = 0; i < len-j; i++){
char ch1 = str[i];
char ch2 = str[i+1];
if (greaterThan(ch1, ch2)) {
swap(str, i, i+1); // swap char 1
}
}
}
printResult(str);
return(0);
}
答案 1 :(得分:1)
下面:
if (greaterThan(ch1, ch2)) {
swap(str, i, i+1); // swap char 1
swap(str, i, i+1); // swap char 2
}
你交换两次,而你只应交换一次。
我很糟糕我的答案的下一部分以前的版本不是泡沫短缺:
另一个问题是你使用彼此相邻的元素而你没有使用i和j索引的元素进行比较和交换。所以你最好应该有这样的东西:
if (greaterThan(str[i], str[j]))
swap(str, i, j);
答案 2 :(得分:0)
if (greaterThan(ch1, ch2)) {
swap(str, i, i+1); // swap char 1
swap(str, i, i+1); // swap char 2
}
在这段代码中你淹没了两次。
例如:str = [&#39; a&#39;&#39; b&#39;&#39; c&#39;] swap(str,1,2)
用于第一次交换&#34; str&#34;将是['a','c','b']
和第二次交换&#34; str&#34;将是['a','b','c']
。这就是输出与输入相同的原因。
您只需要拨打swap
一次功能。
if (greaterThan(ch1, ch2)) {
swap(str, i, i+1);
}