#include<vector>
#include<string>

#include <iostream>
using namespace std;

int main() 
{
    int n = 0;
    scanf("%d", &n);
    vector<string> v;
    for (int i = 0; i < n; ++i) 
    {
        string s;
        cin >> s;
        v.push_back(s);
    }

    for(int i = 0; i < v.size(); ++i)
    {
        if(v[i].length() < 10) continue;
        
        char head = v[i][0];
        char tail = v[i][v[i].size() - 1]; // 修正这里

        string mid_num = to_string(v[i].length() - 2);

        v[i] = head + mid_num + tail;
    }

    for(int i = 0; i < v.size(); ++i)
        cout << v[i] << endl;

    return 0;
}






  1. 包含头文件 <vector> 和 <string>,用于使用C++标准库中的 vector 容器和 string 类型。
  2. 包含 <iostream> 头文件,用于输入输出操作。
  3. 使用 using namespace std; 来避免在引用标准库中的名称时需要重复使用 std:: 前缀。
  4. 定义 main 函数,这是程序的入口点。
  5. 定义一个整型变量 n,用于存储将要输入的单词数量。
  6. 使用 scanf("%d", &n); 读取用户输入的整数 n
  7. 定义一个 vector<string> 类型的变量 v,用来存储输入的字符串。
  8. 进入一个 for 循环,循环次数由变量 n 决定。这里有一个错误:循环的迭代变量 i 没有声明,且 ++n 应该是 ++i
  9. 在循环体内,使用 cin >> s; 读取一个字符串 s
  10. 使用 v.push_back(s); 将读取的字符串添加到 vector v 中。
  11. 进入第二个 for 循环,遍历 vector v 中的所有字符串。
  12. 如果当前字符串的长度小于10,使用 continue 跳过当前循环迭代,不对短单词进行处理。
  13. 如果字符串长度达到或超过10,执行缩写处理:使用 v[i][0] 获取字符串的首字符 head。错误地尝试使用 v[i][v[i].size() - 1] 获取尾字符,这实际上是错误的,应该是 v[i][v[i].size() - 1] 来获取最后一个字符 tail。计算中间字符的数量,即字符串长度减去2(首尾字符),并将其转换为字符串 mid_num。构造新的缩写字符串,格式为 head + mid_num + tail,并用它替换原字符串。
  14. 第三个 for 循环遍历 vector v,使用 cout 输出每个处理后的字符串。
  15. main 函数返回0,表示程序正常结束。