字符串的操作
- 字符串不能直接比较
w[i].word != ''#''
就是错误的,可以用strmp函数或者直接比较字符数组的第一个字符w[i].word[0] != '#'
- 读入字符串后要用
getchar
函数把换行符读掉 - 对于数组char word[]而言,word已经是首地址,所以
&word
语法上是不成立的,在scanf里应该写为word
#include <stdio.h>
#include <string.h>
#define MAXN 21
#define MAXL 10
int main() {
typedef struct _words {
char word[MAXL];
int len;
} words;
words w[MAXN] = {'0',0}, temp = { '0',0 };
char str1;
int i,j,maxi;
for (i = 0; i < MAXN; i++)//读入
{
scanf("%s", w[i].word);
getchar();
if (w[i].word[0] != '#')
w[i].len = strlen(w[i].word);
else
break;
}
/*for (i = 0; i < MAXN; i++)
{
for (j = 0; j < MAXL; j++)
{
str1 = getchar();
if (str1 != '\n'&& str1 !='#')//
{
//printf("%c", w[i].word[j]);
w[i].word[j] = str1;
//printf("%c", w[i].word[j]);//
}
else
break;
}
if (str1 = '\n')
{
w[i].len = j+1;
}
else if (str1 = '#')
{
break;
}
}*/
maxi = i;//冒泡排序
for (i = 0; i < maxi; i++) {
for (j = 0; j < maxi - i; j++) {
if (w[i].len > w[i + j].len)//直接交换不必存储下标
{
temp = w[i];
w[i] = w[i + j];
w[i + j] = temp;
}
}
}
for (i = 0; i < maxi; i++) {//输出
printf("%s ", w[i].word);
}
return 0;
}