您现在的位置是:首页 >技术交流 >C++/C/PTA 字符串排序--string类的使用网站首页技术交流

C++/C/PTA 字符串排序--string类的使用

秋说 2024-06-17 10:43:10
简介C++/C/PTA 字符串排序--string类的使用

题目要求

先输入你要输入的字符串的个数。然后换行输入该组字符串。每个字符串以回车结束,每个字符串不多于一百个字符。
如果在输入过程中输入的一个字符串为stop,也结束输入。
然后将这输入的该组字符串按每个字符串的长度,由小到大排序,按排序结果输出字符串。如果存在多个字符串长度相同,则按照原始输入顺序输出。

输入格式:
字符串的个数,以及该组字符串。每个字符串以‘ ’结束。如果输入字符串为stop,也结束输入.

输出格式:
可能有多组测试数据,对于每组数据,
将输入的所有字符串按长度由小到大排序输出(如果有“stop”,不输出“stop”)

输入样例:

4
faeruhyytrjh tjytj
hsrthts   hjnshtgfhs
stop
3
htrskbns
bsartanjsf tyjndyt
nsr jj jtey

输出样例:

faeruhyytrjh tjytj
hsrthts   hjnshtgfhs
htrskbns
nsr jj jtey
bsartanjsf tyjndyt

提示:
根据输入的字符串个数来动态分配存储空间(采用new()函数)。每个字符串会少于100个字符。


解题思路—C语言

  1. 使用while循环不断读入整数n;
  2. 使用scanf("%*c")消耗前一个输入操作留下的回车符等空白字符;
  3. 定义二维字符数组a和临时字符数组temp;
  4. 使用fgets()函数逐个读入字符串,将其存储在a中,如果读入的字符串为"stop"则终止读入,并将n的值更新为当前的字符串数量;
  5. 去掉每个字符串末尾的换行符
  6. 使用冒泡排序法对字符串按照长度进行排序,对于相邻的两个字符串,若前者比后者长,则交换它们的位置;
  7. 输出排序后的n个字符串,每个字符串后面添加换行符 以便于观察结果。

method 1—C语言

#include<stdio.h>
#include<string.h>
 
int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        getchar();
        char a[101][101];
        char temp[200];  
        for (int i = 0; i < n; i++) {
            gets(a[i]);
            if (strcmp(a[i], "stop") == 0) {
                n = i;  //如果遇到stop直接跳过
                break;
            }
        }
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (strlen(a[j]) > strlen(a[j + 1])) {
                    strcpy(temp, a[j]);
                    strcpy(a[j], a[j + 1]);
                    strcpy(a[j + 1], temp);
                }
            }
        }
        for (int i = 0; i < n; i++) {
            puts(a[i]);
        }
    }
    return 0;
}

需要注意的是,代码中使用了scanf(“%*c”)函数来丢弃输入缓冲区中的多余字符,这一点比较容易被忽略。
同时,还需要注意fgets()函数读入的字符串末尾可能会存在换行符 ,因此需要使用字符串函数strlen()和strcpy()来处理字符串。


解题思路—C++

  1. 通过 cin 输入一个整数 n,表示接下来将输入 n 个字符串;
  2. 根据输入的 n 动态分配一个长度为 n 的 string 数组 p;
  3. 使用循环依次读入 n 个字符串,并将其存储到 p 数组中;
  4. 对 p 数组中的所有字符串按照字典序进行升序排列,使用 sort() 函数实现;
  5. 循环遍历 p 数组,输出排序后的每一个字符串,并在末尾添加一个换行符

method 2—C++

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
    int n;
    while (cin >> n)
    {
        if (n == 0) break;
        string *p = new string[n];
        for (int i = 0; i < n; ++i)
        {
            cin >> p[i];
        }
        sort(p, p + n);
        for (int i = 0; i < n; ++i)
        {
            cout << p[i] << endl;
        }
    }
    return 0;
}

总结

本文使用string类对字符串进行排序,读者可躬身实践。
我是秋说,我们下次见。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。