`

一道C语言题目,我的解法

    博客分类:
  • c
阅读更多

题目:编写一函数expand(s1,s2),用以将字符串s1中的缩记符号在字符串s2中扩展为等价的完整字符,例如将 a-d扩展为abcd。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与-a-z等类似的情况。在main函数中测试该函数:从键 盘输入包含缩记符号的字符串,然后调用该函数进行扩展,输出扩展结果。
(教材 P63:Exercise 3-3)
【输入形式】
从 键盘输入包含扩展符的字符串
【输出形式】
输出扩展后的字符串
【输入样例】
a-c-u-B
【输出样例】
abcdefghijklmnopqrstu-B
【样 例说明】
扩展输入a-c-u为:abcdefghijklmnopqrstu,而B比u值小,所以无法扩展,直接输出。


我 的算法思路如下:
1、通过输入来获取待扩展字符
2、用三个char变量来存储连续的三个字符
3、对三个char变量进行分析,然 后输出

代码如下:
#include <stdio.h>    //标准输入输出库
#include <string.h>    //用到保存字符串的函数gets(char *)
#include <ctype.h>    //基本类型判断头文件

#define N 10    //限制带扩展字符的宽度

int print1(char,char,char);    //带返回的打印,用返回数字来判断移进的字符数
void print2(char,char,char);    //根据最后三个带扩展字符来打印

void main()
{
    int i,j;    // i 存储输入的带扩展字符的个数,j作为循环不变量
    char first,second,third;    //存储连续的三个字符
    char s[N];   //存储所有待扩展字符的数组

    gets(s);    //存储所有待扩展字符
    i=0;
    while(s[i]!='\0')
        i++;

    if(i<3)
        printf("%s",s);    //若总待扩展字符数小于3,则直接输出之
    else
    {
        for(j=0;j<i-3;)    //否则,先判断前面i-3个字符
        {
            first=s[j];
            second=s[j+1];
            third=s[j+2];
            if(print1(first,second,third))
                j=j+2;    //若能扩展,则移进两个字符
            else
                j++;    //若不能扩展,则只移进一个字符
        }
        print2(s[i-3],s[i-2],s[i-1]);    //判断最后三个字符并打印之
    }
}

int print1(char first,char second,char third)
{
    char i;

    //若第二个字符为'-',并且第一个字符和第三个字符同型,并且第一个字符小于第三个字符,则输出
    if(second=='-'&&(isdigit(first)&&isdigit(third)||isalpha(first)&&isalpha(third))&&first<third)
    {
        for(i=first;i<third;i++)
            printf("%c",i);
        return 1;
    }
   
    //否则,只输出第一个字符
    printf("%c",first);
    return 0;
}

void print2(char first,char second,char third)
{
    char i;

    //若第二个字符为'-',并且第一个字符和第三个字符同型,并且第一个字符小于第三个字符,则输出
    if(second=='-'&&(isdigit(first)&&isdigit(third)||isalpha(first)&&isalpha(third))&&first<third)
    {
        for(i=first;i<=third;i++)
            printf("%c",i);
    }
    else
        printf("%c%c%c",first,second,third);    //直接打印最后三个不能扩展的字符
}


简 单的编写几个测试用例,发现均能通过测试,ok!Let's go to the next one!

分享到:
评论

相关推荐

    第四届蓝桥杯关于C语言题目内容及简析.zip

    本文将围绕“第四届蓝桥杯C语言题目内容及简析”这一主题,深入探讨相关知识点,帮助参赛者提升解题技巧。 首先,C语言的基础知识是必不可少的。这包括变量、数据类型、运算符、控制结构(如if语句、switch语句、...

    这是我积累的历年C语言上机答案

    每一道题目都是一次将理论知识转化为实际解决方案的练习。学习者可以通过对比自己的解题思路与标准答案之间的差异,发现自身的不足之处,从而有针对性地进行改进。例如,在解决数组相关的题目时,能否正确地使用循环...

    C语言课本答案(第2版)

    《C语言课本答案(第2版)》是针对C语言学习者的重要参考资料,特别是对于正在学习《C语言程序...同时,理解每一道题目的解法背后所蕴含的编程思想和原则,如模块化、封装、抽象等,将有助于成长为一名优秀的程序员。

    C语言-leetcode题解之11-container-with-most-water.c

    通过C语言实现"Container With Most Water"题目的解法,不仅锻炼了算法思维,而且还能够深入理解C语言的特性,如指针操作、数组处理等。 在解题过程中,我们首先会了解到“双指针”解法。该方法从数组的两端各设一...

    计算机二级C语言上机南开100题

    每一道改错题都是一次学习的机会,通过对错误的分析,可以深入理解C语言的语法规则和程序执行流程。 "2006南开上机100题.txt"可能是一个文本文件,包含了2006年南开大学计算机二级C语言上机考试的题目。这些题目...

    C语言-leetcode题解之21-merge-two-sorted-lists.c

    该C语言题目解中,基本代码框架通常包含以下几个部分: 1. 定义链表节点结构体`ListNode`,至少包含两个元素:存储值的`val`变量和指向下一个节点的`next`指针。 2. 实现合并函数`mergeTwoLists`,该函数接收两个...

    c语言-leetcode题解525-contiguous-array.c

    3. 题目解析: 本文件标题中的"525-contiguous-array"指的是一道特定的LeetCode题目,该题目要求编写一个C语言程序来找到数组中最长的连续数组。这个连续数组的特性是其元素值为0和1,且0和1的数量相等。 4. 算法...

    C语言-leetcode题解之61-rotate-list.c

    这个问题涉及到链表操作,需要进行循环移位操作,是检验程序员对链表理解及C语言指针操作能力的一道经典题目。 首先,C语言中的链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据部分和指向下一个...

    鸡兔同笼c语言解决方法

    鸡兔同笼问题是数学领域中的一道经典题目,该问题可以使用代数方程的解法来解决。在C语言中,我们可以使用循环和条件语句来实现该问题的解决方案。 知识点1:鸡兔同笼问题 鸡兔同笼问题是指鸡和兔关在一个笼子里的...

    C语言-C语言编程基础之leetcode题解第5题最长回文子串.zip

    在本压缩包中,主题聚焦于C语言编程基础与LeetCode算法题目的解法,特别是针对第五题“最长回文子串”的问题。这是一道经典的字符串处理问题,旨在锻炼和提升C语言程序员的逻辑思维和算法实现能力。在本文中,我们将...

    C语言-C语言编程基础之leetcode题解第6题Z字形变换.zip

    这是一道涉及到字符串处理和算法设计的问题,对于理解和应用C语言的基本数据结构和控制流程非常有帮助。 题目描述: 给定一个字符串s,将其按照“Z”字形排列。也就是说,从左到右写入每一行,但返回的每一行都是从...

    C语言-leetcode题解之54-spiral-matrix.c

    C语言编程中,leetcode题解之54-spiral-matrix.c是一道经典编程题目,主要要求编写一个C语言函数,该函数的目的是以螺旋顺序遍历矩阵,并返回遍历结果。这个问题是算法和数据结构领域中数组和矩阵遍历的经典案例,...

    C语言-leetcode题解之12-integer-to-roman.c

    而12-integer-to-roman.c则是一道具体的编程题目,属于将整数转换为罗马数字的范畴。 整数转换为罗马数字的编程问题,通常要求编写一个函数,该函数接收一个整数作为输入,并返回一个表示该整数的罗马数字字符串。...

    C语言入门-leetcode练习之第61题旋转链表.zip

    这是一道涉及数据结构和算法的题目,对于初学者来说,是提高C语言技能和理解链表操作的良好实践。下面将详细讨论相关知识点。 首先,链表是一种非连续、非顺序的存储结构,它通过节点间的指针连接来表示数据序列。...

    全国计算机等级考试三级如何学C语言.pdf

    全国计算机等级考试三级的C语言学习主要针对上机考试中的一道编程题,因此考生需要掌握C语言的基础知识,特别是编程的基本结构、函数与数组的应用、算法,以及基础语法和运算符。首先,学习C语言的语法至关重要,这...

    P5143 攀爬者.c

    “P5143 攀爬者”不仅是一道C语言编程练习题,更是学习算法和提升编程技巧的一个平台。通过解决这样的题目,编程者能够加深对动态规划这一算法思想的理解,同时锻炼自己运用编程语言解决问题的实践能力。

    C语言-leetcode题解之62-unique-paths.c

    本文将深入探讨一道经典的编程题目——leetcode上的“unique-paths”问题,以及如何使用C语言来解决它。 “unique-paths”问题要求编写一个函数,计算从网格的左上角到达右下角的不同路径数。这个问题可以通过动态...

    leetcode对c语言不友好-LeetCode:LeetCode的一个项目

    每一道题目都会有一个单独的文件,但是文件中可能有多个程序段,对应题目的不同解法。有问题或者建议的话,敬请直接在issue里面提出来。 每一个的题解,我都会放上文字解释来说明我的解题思路,然后会放上相应的程序...

    P5742 【深基7.例11】评等级.c

    例11】评等级.c"这个特定的题目中,我们可以推测这是一道涉及基础算法或数据结构的题目。题目的标题中包含“评等级”,这可能意味着题目需要实现一个算法来对某些数据或表现进行评级或分类。由于是基础题目,难度...

Global site tag (gtag.js) - Google Analytics