zoukankan      html  css  js  c++  java
  • C语言编程练习8:分割排序

    思路:题意讲的很清楚,把一行数字中的5看成空格,那么就会分割出多个整数,然后将这些数字排序输出。我们遍历这行数字,遇到5跳过,遇到中间连续的多个5,继续跳过,遇到非5的连续或单一数字字符,将其转换成数字,并将其记录在另一个数组中。最关键的思路是:我们在一行数字的最后给他人为添加一个5,这样每个数字前后相当于都有了分隔符,便于我们处理。最后对数组sort排序。需要注意的是,当原始一行数字的最后有5时,我们再添加一个5会使for循环多跑一次,统计的数字数量会多加一次,最后要减去这多加的一次。详细思路请看代码。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    const int maxn = 1e3 + 10;
    char str[maxn];
    int a[maxn];//存贮分割出的数字
    int main()
    {
    	while (scanf("%s", str) != EOF)
    	{
    		memset(a, 0, sizeof(a)); //数组初始化
    		int len = strlen(str);
    		str[len] = '5';//每行数字字符末尾添加一个'5'
    		int t = 0;
    		for (int i = 0; i <=len; i++) //遍历这行数字
    		{		
    			while (str[i] == '5')//遇到'5'不统计处理,将其跳过,直到遇到非'5'
    			{
    				i++;
    			}
    			while (str[i] != '5')//遇到非‘5’字符,将其转换成数字,直到遇到'5'结束。
    			{
    				a[t] = a[t] * 10 + str[i] - '0';
    				i++;
    			}
    			t++;	//统计数字数量
    		}
    		//t--;
    		if (str[len - 1] == '5')//当原始一行数字的最后有5时,我们再添加一个5会使for循环多跑一次,统计的数字数量t会多加一次,最后要减去这多加的一次
    		{
    			t--;
    		}
    		sort(a, a + t); //排序
    		for (int i = 0; i < t - 1; i++) //注意格式输出
    		{
    			cout << a[i] << " ";
    		}
    		cout << a[t - 1] << endl;
    	}
    	return 0;
    }
    
    

     转自:https://blog.csdn.net/weixin_45629285/article/details/107222806

  • 相关阅读:
    变量的解构赋值
    vue-progressbar 知识点
    <script>标签里的defer和async属性 区别(待补充)
    管理node.js版本的模块:n
    node 知识点
    让node支持es模块化(export、import)的方法
    jvm 知识点
    前端 术语
    js的严格模式
    commonJS、AMD、es模块化 区别(表格比较)
  • 原文地址:https://www.cnblogs.com/FantasticDoubleFish/p/14310382.html
Copyright © 2011-2022 走看看