我是靠谱客的博主 简单西装,最近开发中收集的这篇文章主要介绍字符串扩展,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

think:
1、一定要注意细节,一失足成千古恨
2、学会灵活变通

sdut原题链接

字符串扩展
Time Limit: 1000MS Memory Limit: 65536KB

Problem Description
Tom有些时候为了记录的方便,常常将一些连续的字符用扩展符’-‘简单表示。比如abcdefg可以简写为a-g,即用起始的字符和终止字符中间加上一个扩展符’-‘来表示这个字符串。但是为了处理的方便,Tom又必须将这些我们简单记法扩展成原来的字符串。很明显要是人工来做的话必定很麻烦,Tom知道计算机可以帮助他完成这个任务,但是他却不会编程,这的确让他很上火。他知道今天是山东理工大学第三届ACM校赛的日子,届时来自全校的编程爱好者都会来参加比赛,他很兴奋,因为这个困惑他良久的问题终于要被解决了。给你一个含有扩展符’-‘的字符串,你的任务就是将他还原成原来的字符串。要求是只处理[a-z]、[A-Z]、[0-9]范围内的字符扩展,即只有当扩展符前后的字符同时是小写字母、大写字母或数字时并且扩展符前面的字符不大于后面的字符才进行扩展,其它情况不进行扩展,原样输出。例如:a-R、D-e、0-b、4-B等字符串都不进行扩展。

Input
第一行是一个正整数T,表示共有T组测试数据(T < 100)。下面的T行,每一行包括一个长度不大于1000的待扩展字符串.

Output
每组测试数据输出一行扩展后的字符串。

Example Input
3
ADEa-g-m02
acm-0-5-a-ac-cm-m-A-AC-CM-M
Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-1-3-A-z-a-Z

Example Output
ADEabcdefghijklm02
acm-012345-aaccmm-AACCMM
Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-123-A-z-a-Z

Hint

Author
山东理工大学第三届ACM程序设计竞赛

以下为accepted代码

#include <stdio.h>
#include <string.h>
#define MAXN 1400
int main()
{
    char s[MAXN], ch;
    int T, i, len;
    scanf("%d", &T);
    getchar();
    while(T--)
    {
        scanf("%s", s);
        ///gets(s);///3676 移除了输入数据中的 'r',修复了某些写法下 gets() 会 WA 的问题。by bLue
        len = strlen(s);
        for(i = 0; i < len; i++)
        {
            if(s[i] != '-')
                printf("%c", s[i]);
            else
            {
                if((s[i-1]>='a'&&s[i-1]<='z') && (s[i+1]>='a'&&s[i+1]<='z') && (s[i-1]<=s[i+1]))
                {
                    ch = s[i-1] + 1;
                    while(ch < s[i+1])
                    {
                        printf("%c", ch);
                        ch++;
                    }
                }
                else if((s[i-1]>='A'&&s[i-1]<='Z') && (s[i+1]>='A'&&s[i+1]<='Z') && (s[i-1]<=s[i+1]))
                {
                    ch = s[i-1] + 1;
                    while(ch < s[i+1])
                    {
                        printf("%c", ch);
                        ch++;
                    }
                }
             ///else if((s[i-1]>='0'&&s[i-1]<='9') && (s[i+1]<='0'&&s[i+1]<='9') && (s[i-1]<=s[i+1]))
                else if((s[i-1]>='0'&&s[i-1]<='9') && (s[i+1]>='0'&&s[i+1]<='9') && (s[i-1]<=s[i+1]))
                {
                    ch = s[i-1] + 1;
                    while(ch < s[i+1])
                    {
                        printf("%c", ch);
                        ch++;
                    }
                }
                else
                    printf("-");
            }
        }
        printf("n");
    }
    return 0;
}


/***************************************************
User name: jk160630
Result: Accepted
Take time: 0ms
Take Memory: 104KB
Submit time: 2017-02-04 21:42:00
****************************************************/

以下为wrong answer代码
(一直未找出错误在哪里,希望有小伙伴可以指点留言)

#include <stdio.h>
#include <string.h>
#define MAXN 1400
int main()
{
    char s[MAXN];
    int T, i, len;
    scanf("%d", &T);
    getchar();
    while(T--)
    {
        scanf("%s", s);
        len = strlen(s);
        if(len > 1)
        {
            for(i = 0; i < len-2; i++)
            {
                if(s[i] == s[i+2] && s[i+1] == '-')
                {
                    printf("%c", s[i]);
                    i += 1;
                }
                else if((s[i]>='a'&&s[i]<='z') && s[i+1] == '-' && (s[i+2]>=s[i]&&s[i+2]<='z'))
                {
                    for(; s[i] < s[i+2]; s[i]++)
                        printf("%c", s[i]);
                    i += 1;
                }
                else if((s[i]>='A'&&s[i]<='Z') && s[i+1]=='-' && (s[i+2]>=s[i]&&s[i+2]<='Z'))
                {
                    for(; s[i] < s[i+2]; s[i]++)
                        printf("%c", s[i]);
                    i += 1;
                }
                else if((s[i]>='0'&&s[i]<='9') && s[i+1]=='-' && (s[i+2]>=s[i]&&s[i+2]<='9'))
                {
                    for(; s[i]<s[i+2]; s[i]++)
                        printf("%c", s[i]);
                    i += 1;
                }
                else
                    printf("%c", s[i]);
            }
            i = len-3;
            if(s[i] == s[i+2] && s[i+1] == '-')
            {
                printf("%c", s[i+2]);
            }
            else if((s[i]>='a'&&s[i]<='z') && s[i+1] == '-' && (s[i+2]>=s[i]&&s[i+2]<='z'))
            {
                printf("%c", s[i+2]);
            }
            else if((s[i]>='A'&&s[i]<='Z') && s[i+1]=='-' && (s[i+2]>=s[i]&&s[i+2]<='Z'))
            {
                printf("%c", s[i+2]);
            }
            else if((s[i]>='0'&&s[i]<='9') && s[i+1]=='-' && (s[i+2]>=s[i]&&s[i+2]<='9'))
            {
                printf("%c", s[i+2]);
            }
            else
            {
                printf("%c", s[i+1]);
                printf("%c", s[i+2]);
            }
            printf("n");
        }
        else
            printf("%sn", s);
    }
    return 0;
}


/***************************************************
User name: jk160630
Result: Wrong Answer
Take time: 4ms
Take Memory: 104KB
Submit time: 2017-02-04 21:46:02
****************************************************/

最后

以上就是简单西装为你收集整理的字符串扩展的全部内容,希望文章能够帮你解决字符串扩展所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部