字符串入门练习题1 好长好长的字符串 题解

题目出处:http://codeforces.com/problemset/problem/71/A

题目描述

好长好长的字符串是像 "localization" 或者 "internationalization" 这样的字符串,这些字符串包含很多单词,所以你在抄写这些单词的时候很费力。
我们定义一个字符串为 好长好长的字符串,当且仅当该字符串的长度大于 10。
我们现在在对单词进行简化,所以所有的好长好长的字符串都需要被简化。
我们的简化操作如下:对于一个字符串 s ,如果它是好长好长的字符串(长度超过10),那么我们将其转换为三部分的拼接:
第一部分是 s 的首字母;
第二部分是 s 中取出首字母和尾字母之后剩下的元素的个数;
第三部分是 s 的尾字母。
比如,对于一个字符串 "localization" 来说,它的长度为 12,超过了10,所以它是一个好长好长的字符串。对它进行简化操作后的结果为 "l10n"。
对 "internationalization" 进行简化后的操作为 "i18n"
而对 "apple" 进行简化操作后的结果还是它本身 —— "apple" ,因为这个单词中的元素个数没有超过 10。
现在给你一个若干个单词,你需要一次输出每一个单词简化后的结果。

输入格式

输入的第一行包含一个整数 \(n(1 \le n \le 100)\),用于表示你需要处理的单词个数。
接下来的 \(n\) 行,每行包含一个字符串 s (s 的长度在 1 到 100 之间)。

输出格式

输出 \(n\) 行,每行对应输入中的单词简化后的结果。

样例输入

4
word
localization
internationalization
pneumonoultramicroscopicsilicovolcanoconiosis

样例输出

word
l10n
i18n
p43s

题目分析

对于每一个字符串 \(s\) ,假设它的长度为 \(n\) , 如果它的长度 \(\le\) 10,我们原样输出;否则,我们只需要输出 \(s[0] + (n-2) + s[n-1]\) 就可以了。
使用 char 数组实现的代码如下:

#include <bits/stdc++.h>
using namespace std;

char ch[110];
int n, m;

int main() {
    cin >> n;
    while (n --) {
        cin >> ch; m = strlen(ch);
        if (m <= 10) cout << ch << endl;
        else cout << ch[0] << m - 2 << ch[m-1] << endl;
    }
    return 0;
}

使用 string 实现的代码如下:

#include <bits/stdc++.h>
using namespace std;

string s;
int n, m;

int main() {
    cin >> n;
    while (n --) {
        cin >> s; m = s.length();
        if (m <= 10) cout << s << endl;
        else cout << s[0] << m - 2 << s[m-1] << endl;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zifeiynoip/p/11450560.html