【字符串】PTA试题

您所在的位置:网站首页 柚木英文单词 【字符串】PTA试题

【字符串】PTA试题

2024-06-02 04:47| 来源: 网络整理| 查看: 265

题干如下: 本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

输入格式: 输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过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