【字符串】PTA试题 |
您所在的位置:网站首页 › 柚木英文单词 › 【字符串】PTA试题 |
题干如下: 本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。 输入格式: 输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。 输出格式: 输出为排序后的结果,每个单词后面都额外输出一个空格。 输入样例: blue red yellow green purple # 输出样例: red blue green yellow purple . . . 本题需要解决以下几个问题: **①如何一直输入字符串直到输入#为止:**使用死循环while(1),后满足一定条件便跳出循环(break语句)的方法。此题的条件显然是if(str[i][0]==’#’)。 **②如何对字符串进行排序:**对于初学者来说,首先学习的排序是“冒泡排序”,那如何对字符串进行基于长度的“冒泡排序”呢?这里,我们需要使用strlen函数和strcpy函数:(这两个函数均在头文件中) (1)strlen函数:统计字符串的长度。统计空格,不统计末位’\0’。 (2)strcpy函数:即复制函数。strcpy(a,b)的作用可以简单理解为将b中的字符串复制到a中(注意:b字符串的末位’\0’也会被复制,也就是说a完全变成了b)。 由于是对字符数组的复制,函数需要传递指针,则括号内只需要写数组名(首元素地址)就可以了。 **以前我们学过数字大小的冒泡排序,其中交换两数的部分通过temp暂存变量配合来实现。现在对字符串进行交换也是如此。 (temp是另外创建的一维字符数组) if (strlen(str[k-1])>strlen(str[k])) { strcpy(temp,str[k]); strcpy(str[k],str[k-1]); strcpy(str[k-1],temp); } 解决了上述问题,我们就可以写程序了: #include #include int main(void) { char str[20][11]; int i=0; while (1) { scanf("%s",str[i]); if (str[i][0]=='#') break; i++; //i同时也记录了有几个单词 } int len=i; //用len记录i,增加程序的可读性 int j,k; char temp[11]; for (j=0; j if (strlen(str[k-1])>strlen(str[k])) { strcpy(temp,str[k]); strcpy(str[k],str[k-1]); strcpy(str[k-1],temp); } } } for (j=0; j |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |