2020年HDU校赛 Problem A

题面

Problem Description
在编写代码的时候,有些人习惯使用制表符(Tab键)来控制缩进、作分隔等,而有一些人则喜欢使用空格来做这些事情。

在一些代码编辑器中,有一种将制表符转化为空格的功能。使用者只需设定好每个制表符要用多少个空格来替代,代码编辑器就会自动地对代码进行文本替代,使其代码风格与使用者接近。

这里将会给出一份n行的代码,你的任务是写一个程序,将代码中的所有制表符(用′′−>′′表示)转化为k个空格,并将转化后的代码输出。

Input
第一行包含一个正整数T(1≤T≤10),表示测试数据的组数。

每组测试数据第一行包含两个正整数n,k(1≤n≤10,1≤k≤8),分别表示代码的行数以及制表符应该被替换成多少个空格。

接下来n行,每行一个非空的字符串,表示每行代码。每个字符串长度均不超过50,且字符串仅由小写字母"a"到"z"、数字"0"到"9"、 特殊字符"{", "}", "(",")", ";", "-", ">"构成。

Output
对于每组测试数据,输出n行,每行一个字符串,表示每行代码转化后的结果。

Sample Input
2
5 2
dfs(x){
->if(x){
->->dfs(x);
->}
}
1 3
->->->print(a);->print(b);

Sample Output
dfs(x){
if(x){
dfs(x);
}
}
print(a); print(b);

思路

基础字符串的输入输出,读入n个字符串,判断制表符的存在并用空格替换,要注意单独的特殊字符判断,加条件就可以了。

代码实现

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
string s[11];
int n,m;
int main () {
    int t;
    cin>>t;
    int k=1;
    while (t--) {
      cin>>n>>m;
      for (int i=1;i<=n;i++) cin>>s[i];
      for (int i=1;i<=n;i++) {
          for (int j=0;j<=s[i].length()-1;j++) {
              if (s[i][j]=='-'&&s[i][j+1]=='>') {
                  for (int k=1;k<=m;k++) cout<<" ";
              }
            if ((s[i][j]=='-'&&s[i][j+1]!='>')||(s[i][j]=='>'&&s[i][j-1]!='-')) {
                cout<<s[i][j];
                continue;
            }
            if (s[i][j]!='-'&&s[i][j]!='>') cout<<s[i][j];
          }
          cout<<endl;
      }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/hhlya/p/13170073.html