7-6 字符串长度排序--string类的使用 总结

7-6 字符串排序--string类的使用(30 分)

先输入你要输入的字符串的个数。然后换行输入该组字符串。每个字符串以回车结束,每个字符串不多于一百个字符。 如果在输入过程中输入的一个字符串为“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个字符。 测试数据有多组,注意使用while()循环输入。


分析:这题就是考的就是字符串长度排序问题,排序很简单,关键是“有多组测试数据”这个就很烦了,网上查到是用“EOF”的,思想应该是:测试数据是一个文本,末尾有EFO(-1)表示结束,通过对EOF的检测,来判断输入结束。一般网上做题,有多组数据输入的时候可能用EOF控制循环输入比较好。但是,自己输入多组测试数据的时候,死循环和它的效果是一样的。

  都写成函数了,复用性比较高,不过是老师写的大笑,这里面要学的挺多的,还有很多不熟悉

  排序以后直接调用库函数的快速排序吧,(新补充一下:sort函数也很好用,就三个参数,貌似比qsort简单一点)

  调用方式:

 
   
  • #include <stdlib.h>
  • qsort(待排序数组首地址 ,  数组中待排序元素数量  , 各元素的占用空间大小  , 指向函数的指针);
  • https://www.cnblogs.com/sjy123/p/3287817.html 这里面有关于快速排列的详细介绍,写的挺好,以后用到,再看吧                  
#include<iostream>
#include<stdlib.h>
using namespace std;


int cmp(const void*a,const void*b)
{
    return *(int*)a-*(int*)b;///升序
}


int main()
{
    int i;
    int a[10]={10,9,8,7,6,5,4,3,2,1};
    qsort(a,10,sizeof(int),cmp);
    for(i=0;i<10;i++)
        cout<<a[i]<<endl;
    return 0;
}

#include <iostream>
#include <string>

using namespace std;

string  *inputstring(int &number) ;
void sortstring(string *strArray, int number) ;
void printstring(string *strArray, int number) ;
void freeStrArray(char **strArray, int number) ;


int main()
{
    int n1, n2 ;
    string *strArray1 ;
    while(1)
    {
        strArray1 = inputstring(n1) ;
        sortstring(strArray1, n1) ;
        //cout << endl << "Sorted string is:" << endl ;
        printstring(strArray1, n1) ;

    }

    delete[] strArray1 ;

    return 0;
}


string *inputstring(int &number)
{
    string *strArray ;
    char  strTmp[100], ch ;
    int i ;
    cin >> number ;
    cin.get(ch) ;
    strArray = new string [number] ;
    for(i=0 ; i<number ; i++)
    {
        cin.getline(strTmp, 100);  ///必须是字符指针
        strArray[i] = strTmp ;    ///strTmp是一个字符数组
        if(strArray[i] =="stop" )
            break ;

    }
    number = i ;
    return strArray ;
}

void sortstring(string *strArray, int number)
{
    string pstrTmp ;

    for(int i=0 ; i<number-1 ; i++)
    {
        for(int j=i+1  ; j<number ; j++)
        {
            if(strArray[i].length()>strArray[j].length())
            {
                pstrTmp = strArray[i] ;
                strArray[i] = strArray[j] ;
                strArray[j] = pstrTmp ;
            }
        }
    }
}

void printstring(string *strArray, int number)
{
    for(int i=0 ; i<number ; i++)
        cout << strArray[i] << endl ;
    //cout << endl ;
}


### PTA 字母串 Java 实现或解决方案 在处理与字母串 `PTA` 相关的 Java 实现时,通常会涉及字符串操作、输入优化以及特定逻辑判断等问题。以下是针对此问题的一个综合解答。 #### 使用 BufferedReader 提升性能 当涉及到大量数据输入时,使用 `BufferedReader` 能够显著提升程序效率,减少因标准输入流而导致的超时风险。例如,在读取多组测试用例时,可以通过如下方式实现高效输入: ```java import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line; while ((line = br.readLine()) != null && !line.isEmpty()) { processLine(line); } } private static void processLine(String line) { if (isValidIdentifier(line)) { System.out.println("true"); } else { System.out.println("false"); } } private static boolean isValidIdentifier(String str) { if (str == null || str.isEmpty() || !Character.isJavaIdentifierStart(str.charAt(0))) { return false; } for (int i = 1; i < str.length(); i++) { if (!Character.isJavaIdentifierPart(str.charAt(i))) { return false; } } return true; } } ``` 上述代码通过 `BufferedReader` 进行快速输入,并调用了辅助方法来验证每行字符串是否为合法的 Java 标识符[^2]。 #### 验证 Java 标识符合法性 对于给定的一系列字符串,需逐一检查其是否符合 Java 的标识符命名规则。具体而言,合法的 Java 标识符应满足以下条件: - 不为空; - 开头字符必须是字母、下划线 `_` 或美元符号 `$`; - 后续字符可包含字母、数字、下划线 `_` 和美元符号 `$`。 此部分功能已在上一节中的 `isValidIdentifier` 方法中体现[^3]。 #### 对 ArrayList 按字母顺序排序(忽略大小写) 如果需要对一组字符串按照字母顺序排列并忽略大小写的差异,可以利用 `Collator` 完成这一需求。示例如下: ```java import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.text.Collator; public class SortExample { public static void main(String[] args) { List<String> list = new ArrayList<>(Arrays.asList("Pta", "pta", "PTa", "ptA")); Collator collator = Collator.getInstance(); collator.setStrength(Collator.PRIMARY); // 忽略大小写和其他次要差异 list.sort(collator::compare); System.out.println(list); } } ``` 这段代码展示了如何创建一个包含不同形式 `PTA` 组合的列表,并对其进行排序以得到统一的结果[^4]。 --- ####
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值