列表

详情


OR135. 单词缩写

描述

在日常书面表达中,我们经常会碰到很长的单词,比如"localization"、"internationalization"等。为了书写方便,我们会将太长的单词进行缩写。这里进行如下定义:

如果一个单词包含的字符个数达到或者超过10则我们认为它是一个长单词。所有的长单词都需要进行缩写,缩写的方法是先写下这个单词的首尾字符,然后再在首尾字符中间写上这个单词去掉首尾字符后所包含的字符个数。比如"localization"缩写后得到的是"l10n","internationalization"缩写后得到的是"i18n"。现给出n个单词,将其中的长单词进行缩写,其余的按原样输出。

输入描述

第一行包含要给整数n。1≤n≤100

接下来n行每行包含一个由小写英文字符构成的字符串,字符串长度不超过100。

输出描述

按顺序输出处理后的每个单词。

示例1

输入:

4
word
localization
internationalization
pneumonoultramicroscopicsilicovolcanoconiosis

输出:

word
l10n
i18n
p43s

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-08-16

#include<stdio.h>
#include<string.h>
int main()
{
    int n=0,i,len;
    char a[122];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s",a);
        len=strlen(a);
        if(len<10)
            printf("%s\n",a);
        else
            printf("%c%d%c\n",a[0],strlen(a)-2,a[strlen(a)-1]);
    }
}

C 解法, 执行用时: 2ms, 内存消耗: 224KB, 提交时间: 2019-01-14

#include <stdio.h>
#include <string.h>
#define BUFFER_LEN 128
int main()
{
    int n;
    int i;
    char buffer[BUFFER_LEN];
    scanf("%d", &n);
    for(i = 0; i < n; i++){
        int length;
        scanf("%s", buffer);
        if((length = strlen(buffer)) >= 10)
            printf("%c%d%c\n", buffer[0], length - 2, buffer[length-1]);
        else
            printf("%s\n", buffer);
        memset(buffer, 0, BUFFER_LEN);
    }
    return 0;
}

上一题