第五周作业
这个题属于哪个课程 | C语言程序设计II |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/zswxy/software-engineering-class1-2018/homework/2825 |
我在这个课程的目标是 | 更加熟悉字符型数组的运用及一些排序的方法 |
这个作业在哪个具体方面帮助我实现目标 | 用数组与字符数数组结合,用冒泡排序法将其相关联 |
参考文献 | C语言程序设计 |
本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。
输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。
输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。
输入样例:
blue
red
yellow
green
purple
输出样例:
red blue green yellow purple
PTA:
实验代码:
#include<stdio.h>
int main()
{
int a[20],i,j,x=0,y=0,m=0,n=0,t=1,flag,k,p,s;
char str[190];
while((str[t]=getchar())!='#')
t++;
for(i=1; i<=t; i++)
{
m++;
if(str[i]=='\n')
{
a[y]=m-1;
y++;
m=0;
}
}
for(i=1; i<y; i++)
for(j=0; j<y-i; j++)
if((a[j]>a[j+1]))
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
for(i=0; i<y; i++)
{
if(a[i-1]==a[i])
{
for(p=1; p<=t; p++)
{
n++;
if(str[p]=='\n')
{
if(n-1==a[i]&&p>x+1)
{
x=p-1;
s=n-2;
break;
}
n=0;
}
}
}
else
for(p=1; p<=t; p++)
{
n++;
if(str[p]=='\n')
{
if(n-1==a[i]&&p!=x+1)
{
x=p-1;
s=n-2;
break;
}
n=0;
}
}
for(j=x-s; j<=x; j++)
{
printf("%c",str[j]);
if(j==x)
{
printf(" ");
}
}
n=0;
}
return;
}
博客园:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a[20],i,j,x=0,y=0,m=0,n=0,t=1,k,p,s;
char str[190];
FILE*fp;
fp=fopen("C://Users//Dell//Desktop//Rehiwang.txt","r+");
for(i=1;; i++)
{
t++;
fscanf(fp,"%c",&str[i]);
if(str[i]=='#')
break;
}
for(i=1; i<=t; i++)
{
m++;
if(str[i]=='\n')
{
a[y]=m-1;
y++;
m=0;
}
}
for(i=1; i<y; i++)
for(j=0; j<y-i; j++)
if((a[j]>a[j+1]))
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
for(i=0; i<y; i++)
{
if(a[i-1]==a[i])
{
for(p=1; p<=t; p++)
{
n++;
if(str[p]=='\n')
{
if(n-1==a[i]&&p>x+1)
{
x=p-1;
s=n-2;
break;
}
n=0;
}
}
}
else
for(p=1; p<=t; p++)
{
n++;
if(str[p]=='\n')
{
if(n-1==a[i]&&p!=x+1)
{
x=p-1;
s=n-2;
break;
}
n=0;
}
}
for(j=x-s; j<=x; j++)
{
fprintf(fp,"%c",str[j]);
if(j==x)
{
fprintf(fp," ");
}
}
n=0;
}
return 0;
}
运行截图:
设计思路:
本题遇到的问题及其解决方法:
问题:一开始忘记考虑有多个相同长度单词的情况
解决方案:把多个相同长度单词的情况写入代码