在日常书面表达中,我们经常会碰到很长的单词,比如"localization"、"internationalization"等。为了书写方便,我们会将太长的单词进行缩写。这里进行如下定义:
如果一个单词包含的字符个数达到或者超过10则我们认为它是一个长单词。所有的长单词都需要进行缩写,缩写的方法是先写下这个单词的首尾字符,然后再在首尾字符中间写上这个单词去掉首尾字符后所包含的字符个数。比如"localization"缩写后得到的是"l10n",“internationalization"缩写后得到的是"i18n”。现给出n个单词,将其中的长单词进行缩写,其余的按原样输出。
第一行包含要给整数n。1≤n≤100
接下来n行每行包含一个由小写英文字符构成的字符串,字符串长度不超过100。
按顺序输出处理后的每个单词。
示例1
输入:
4
word
localization
internationalization
pneumonoultramicroscopicsilicovolcanoconiosis
输出:
word
l10n
i18n
p43s
#include<iostream>
#include<string>
using namespace std;
int main()
{
//个数达到或者超过10则
int n;
cin>>n;
string str;
while(n--)
{
cin>>str;
if(str.size()<10)
{
cout<<str<<endl;
}
else
{
cout<<str[0]<<str.size()-2<<str[str.size()-1]<<endl;
}
}
return 0;
}
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。
示例 1:
输入:"Mr John Smith ", 13
输出:"Mr%20John%20Smith"
示例 2:
输入:" ", 5
输出:"%20%20%20%20%20"
虽然是替换问题,但是牛成的字符串整体变长了,因替换内容比被替换内容长,所以,一定涉及到字符串中字符的移动问题,移动方向一定是向后移动,所以现在的问题无非是移动多少的问题,因为是 ’ '替换成"%20",是1换3,所以可以先统计原字符串中空格的个数(设为n),然后可以计算出新字符串的长度,所以: new_length = old_length + 2n,最后,定义新老索引(或者指针),各自指向新老空间的结尾,然后进行old->new的移动′如果是空格,就连续放入“%20” ,其他平移即可。
class Solution {
public:
string replaceSpaces(string S, int length)
{
//先求出一共有多少个空格
int count = 0;
for(int i = 0;i < length;i++)
{
if(S[i] == ' ')
count++;
}
int new_length = length + count*2;
int new_index = new_length-1;
int old_index = length-1;
for(int i = old_index;i >= 0;i--)
{
if(S[i]!=' ')
{
S[new_index] = S[i];
new_index--;
}
else
{
S[new_index--] = '0';
S[new_index--] = '2';
S[new_index--] = '%';
}
}
S[new_length] = '\0';
return S;
}
};
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/attemptendeavor/article/details/122748377
内容来源于网络,如有侵权,请联系作者删除!