当前位置:   article > 正文

C/C++蓝桥杯之解码问题

C/C++蓝桥杯之解码问题

问题描述:小明有一串很长的英文,可能包含大写和小写字母。在这串字母中,有很多字母是连续且重复的。小明想了一个将这串字母表达的很短的办法。将连续的几个相同的字母写成“字母+出现次数”的形式。例如:连续的5个a,即aaaaa可以简写成a5(也可以简写成a4a、aa3a等)。对于这串字母:HHHellllloo,小明可以简写成H3el5o2.为了方便表达,小明不会将超过9个连续相同的字母写成简写的形式。现在给出简写后的字符串,请帮助小明将其还原成原来的字符串。

分析:本题可以采用模拟法求解,将每个元素都遍历一遍即可,分为以下两种情况:

1.若当前元素是字符,且下一个元素是数字,则需要循环输出当前字符,循环输出的次数就是数字的值。

2.若当前元素和下一个元素都是字符,则将这个字符输出一遍。

规定:原来的字符串长度不超过100

C++程序:

  1. #include<bits/stdc++.h>
  2. #include<string.h>
  3. using namespace std;
  4. int main()
  5. {
  6. char s[101];
  7. cin>>s;
  8. int length;
  9. length=strlen(s);
  10. for(int i=0;i<length;i++)
  11. {
  12. if(s[i+1]>'1'&&s[i+1]<='9')//若当前元素的下一个元素是数字
  13. {
  14. for(char j='1';j<=s[i+1];j++)
  15. {
  16. cout<<s[i];
  17. }
  18. i++;//已知下一个元素是数字,直接跳过
  19. }
  20. else
  21. {
  22. cout<<s[i];//若下一个元素是字符,则将这个字符输出一遍。
  23. }
  24. }
  25. return 0;
  26. }

C程序:

  1. #include<stdio.h>
  2. #include<string.h>
  3. #define size 101//这可以直接更改字符长度
  4. int main()
  5. {
  6. int length;
  7. char arr[size];
  8. gets(arr);
  9. length = strlen(arr);
  10. for (int i = 0; i <length; i++)
  11. {
  12. if (arr[i + 1] > '1' && arr[i + 1] <='9')
  13. {
  14. for (char j = '1'; j <= arr[i + 1]; j++)
  15. {
  16. printf("%c", arr[i]);
  17. }
  18. i++;
  19. }
  20. else
  21. {
  22. printf("%c", arr[i]);
  23. }
  24. }
  25. return 0;
  26. }

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号