小明用快捷键复制,可以一次性赋值很多东西

copy
描述

小明最近在学习计算机的快捷键,今天学了一个很有用的快捷键Ctrl+C,复制快捷键,可以一次性赋值很多东西,然后再通过Ctrl+V粘贴出来,小明知道你在学习编程,所以想让你编写一个程序,他的功能是根据指令,自动复制指定的次数,例如输入字符串,则输出重复三次,当然小明想让你的程序更加炫酷,给出的字符串可能会很复杂,会有多个数字,例如a2b3,此时计算机会从左往右扫描字符串,现把a重复2次为aab3,然后左边的所有内容,现在请你完成小明想要的程序吧

day09-02.zip

输入
第一行一个整数T,表示数据组数(T<=100)

其后T行,每行两个信息,第一个是数字,表示字符串的长度,第二个是字符串,由数字和小写字母组成(题目保证不会出现单独的0,长度小于100)

输出
T行,每行一个字符串,表示重复后的结果

输入样例 1

1
4 a2b2
输出样例 1

aabaab

一个实现,如下:


#include <iostream>
#include <string.h>
using namespace std;

// https://ask.csdn.net/questions/7989823?spm=1005.2025.3001.5141
int main(void){
    
    int T;
    int i=0;
    char str[101];
    
    cin>>T; //  获取数据组数 
    while(i<T){   //测试T组数据 
            
        int slen ;
        cin>>slen;   // 获取当前组字符串的长度 
        
        cin>>str;  // 获取当前组字符串 
        
        int num;
        int last;
        // 如果当前组字符串为数字,则左边总的重复次数num为最后一个数字的次数 
        if (str[slen-1]>='0'&&str[slen-1]<='9'){
            num = str[slen-1]-'0';
            last = slen -1;  // 最后字符到第slen-1个字符结束 
        }else{     // 如果当前组字符串不是数字,则左边总的重复次数num为1次 
            num=1;   
            last = slen;  // 最后字符 到slen个字符结束 
        }
        
        for(int j=0;j<num;j++){  // 重复输出num次左边的字符串 
            
            int k=0;
            char temp[100];
            int t=0;
            while(k<last){  // 遍历需要扫描的字符串 
                
                if (str[k]>='a'&&str[k]<='z'){  // 如果为小写字母在,则存入临时数组 
                    temp[t] = str[k];
                    t++;
                }
                if(str[k]>='0'&&str[k]<='9'){  //如果为数字,则输出此数字次数次 临时数组里字符串 
                    temp[t]='\0';
                    for(int p=0;p<(str[k]-'0');p++){
                        cout<<temp;                        
                    }
                    t=0;
                }
                
                if(k==(last-1)){  // 如果到最后一个字符, 则输出临时数组里的字符串,这个针对原始字符串最后一个字符不是数字的情况 
                    temp[t]='\0';
                    cout<<temp;    
                    t=0;                
                }
                k++;
            }
            
        }
        
        // 打印每组数据最后的换行符 
        if(i<(T-1)){
            cout<<endl;
        }
        
        i++;
        
    }
} 

img

【以下回答由 GPT 生成】

解决方案

基本思路是根据输入的字符串,逐个扫描字符,根据字符的类型判断是数字还是字符,然后根据需要重复次数进行复制。

算法步骤如下:

  1. 读取数据组数T。
  2. 对于每组数据,读取字符串的长度和字符串本身。
  3. 对于每个字符,判断是数字还是字符。
  4. 如果是数字,将其转换为整数,作为当前字符需要重复的次数。
  5. 如果是字符,将其复制重复指定的次数。
  6. 将以上过程生成的字符串作为结果。
  7. 输出结果。

以下是C++实现的代码:

#include <iostream>
#include <string>

using namespace std;

string repeatString(string str, int repeat) {
    string result = "";
    for (int i = 0; i < repeat; i++) {
        result += str;
    }
    return result;
}

string copyStrings(int T) {
    string result = "";
    for (int i = 0; i < T; i++) {
        int length;
        string str;
        cin >> length >> str;

        string temp = "";
        int repeat = 0;
        for (char c : str) {
            if (isdigit(c)) {
                repeat = repeat * 10 + (c - '0');
            } else {
                temp += repeatString(string(1, c), repeat);
                repeat = 0;
            }
        }
        result += temp + "\n";
    }
    return result;
}

int main() {
    int T;
    cin >> T;
    cout << copyStrings(T) << endl;
    return 0;
}

这个程序定义了两个函数:repeatString函数用于将指定的字符串重复指定的次数; copyStrings函数用于处理多组数据,并返回结果字符串。 最后,程序通过读取输入并调用相关函数返回结果。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

根据输入的字符串进行扫描,并根据数字重复字符。最后,输出重复后的结果。

#include <iostream>
#include <string>
using namespace std;

string dealStr(string str, int repeat) {
    string result = "";
    for (int i = 0; i < repeat; i++) {
        result += str;
    }
    return result;
}

int main() {
    int T;
    cin >> T;
    while (T--) {
        int length;
        string input;
        cin >> length >> input;
        int index = 0;
        string str = "";
        while (index < length) {
            if (isdigit(input[index])) {
                int repeat = input[index] - '0';
                str = dealStr(str, repeat);
            } else {
                str += input[index];
            }
            index++;
        }
        cout << str << endl;
    }
    return 0;
}