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

简介: 先输入你要输入的字符串的个数。然后换行输入该组字符串。每个字符串以回车结束,每个字符串不多于一百个字符。

题目要求

先输入你要输入的字符串的个数。然后换行输入该组字符串。每个字符串以回车结束,每个字符串不多于一百个字符。

如果在输入过程中输入的一个字符串为stop,也结束输入。

然后将这输入的该组字符串按每个字符串的长度,由小到大排序,按排序结果输出字符串。如果存在多个字符串长度相同,则按照原始输入顺序输出。


输入格式:

字符串的个数,以及该组字符串。每个字符串以‘\n’结束。如果输入字符串为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语言

使用while循环不断读入整数n;

使用scanf("%*c")消耗前一个输入操作留下的回车符等空白字符;

定义二维字符数组a和临时字符数组temp;

使用fgets()函数逐个读入字符串,将其存储在a中,如果读入的字符串为"stop"则终止读入,并将n的值更新为当前的字符串数量;

去掉每个字符串末尾的换行符\n;

使用冒泡排序法对字符串按照长度进行排序,对于相邻的两个字符串,若前者比后者长,则交换它们的位置;

输出排序后的n个字符串,每个字符串后面添加换行符\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()函数读入的字符串末尾可能会存在换行符\n,因此需要使用字符串函数strlen()和strcpy()来处理字符串。


解题思路—C++

通过 cin 输入一个整数 n,表示接下来将输入 n 个字符串;

根据输入的 n 动态分配一个长度为 n 的 string 数组 p;

使用循环依次读入 n 个字符串,并将其存储到 p 数组中;

对 p 数组中的所有字符串按照字典序进行升序排列,使用 sort() 函数实现;

循环遍历 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类对字符串进行排序,读者可躬身实践。

我是秋说,我们下次见。

目录
相关文章
|
24天前
|
存储 安全 C语言
C++ String揭秘:写高效代码的关键
在C++编程中,字符串操作是不可避免的一部分。从简单的字符串拼接到复杂的文本处理,C++的string类为开发者提供了一种更高效、灵活且安全的方式来管理和操作字符串。本文将从基础操作入手,逐步揭开C++ string类的奥秘,帮助你深入理解其内部机制,并学会如何在实际开发中充分发挥其性能和优势。
|
24天前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
2天前
|
设计模式 安全 C++
【C++进阶】特殊类设计 && 单例模式
通过对特殊类设计和单例模式的深入探讨,我们可以更好地设计和实现复杂的C++程序。特殊类设计提高了代码的安全性和可维护性,而单例模式则确保类的唯一实例性和全局访问性。理解并掌握这些高级设计技巧,对于提升C++编程水平至关重要。
31 16
|
2天前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
31 11
|
8天前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
|
6天前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
45 6
|
8天前
|
存储 JavaScript Java
课时44:String类对象两种实例化方式比较
本次课程的主要讨论了两种处理模式在Java程序中的应用,直接赋值和构造方法实例化。此外,还讨论了字符串池的概念,指出在Java程序的底层,DOM提供了专门的字符串池,用于存储和查找字符串。 1.直接赋值的对象化模式 2.字符串池的概念 3.构造方法实例化
|
9天前
|
Java 程序员
课时16:String字符串
课时16介绍了Java中的String字符串。在Java中,字符串使用`String`类表示,并用双引号定义。例如:`String str = &quot;Hello world!&quot;;`。字符串支持使用“+”进行连接操作,如`str += &quot;world&quot;;`。需要注意的是,当“+”用于字符串与其他数据类型时,其他类型会先转换为字符串再进行连接。此外,字符串中可以使用转义字符(如`\t`、`\n`)进行特殊字符的处理。掌握这些基本概念对Java编程至关重要。
|
24天前
|
安全 编译器 C语言
【C++篇】深度解析类与对象(中)
在上一篇博客中,我们学习了C++类与对象的基础内容。这一次,我们将深入探讨C++类的关键特性,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载、以及取地址运算符的重载。这些内容是理解面向对象编程的关键,也帮助我们更好地掌握C++内存管理的细节和编码的高级技巧。
|
27天前
|
编译器 C语言 C++
类和对象的简述(c++篇)
类和对象的简述(c++篇)