保持输出和输入不交替

Keep output and input from alternating?

本文关键字:输入 输出      更新时间:2023-10-16

我对编码很陌生,一直在练习一些简单的问题 codeforces.com。 我正在解决这个问题,但它似乎要求输入(一次全部)产生输出(一次全部)。 我只能弄清楚如何一次获得一个输出。

以下是该问题的基本说明:

输入

第一行包含一个整数 n(1 ≤ n ≤ 100)。以下 n 行中的每一行都包含一个单词。所有单词都由小写拉丁字母组成,长度为 1 到 100 个字符。

输出

打印 n 行。第 i 行应包含从输入数据中替换第 i 个单词的结果。

例子

输入

地方化

国际化

肺超微微矽火山病

输出

L10N

i18n

P43S

这是我的代码:

#include <iostream>
#include <string>
using namespace std;
void wordToNumbers(string word){
    int midLetters = word.length();
    char firstLetter = word.front();
    char lastLetter = word.back();
    cout <<firstLetter <<(midLetters-2) <<lastLetter <<endl;
}
int main(){
    string wordInput;
    string firstNum;
    getline(cin,firstNum);
    int i = stoi(firstNum);
    for(i>=1; i--;){
        getline(cin,wordInput);
        if (wordInput.length() > 10){
            wordToNumbers(wordInput);
        } else {
            cout <<wordInput <<endl;
        }
    }
    return 0;
}
可以

逐行读取和打印输出。

您的解决方案完全被接受:http://codeforces.com/contest/71/submission/16659519

我也是 c++ 的初学者。我的想法是先将每一行保存在缓冲区中,然后将所有内容写入 std::cout。

我使用 std::vector 作为缓冲区,因为 IMO 它很容易理解并且在许多情况下非常有用。基本上它是一个更好的数组。你可以在这里阅读更多关于std::vector的信息。

#include <iostream>
#include <string>
//for use of std::vector container
#include <vector>
using namespace std;
void wordToNumbers(string word){
    int midLetters = word.length();
    char firstLetter = word.front();
    char lastLetter = word.back();
    cout <<firstLetter <<(midLetters-2) <<lastLetter <<endl;
}
int main(){
    string wordInput;
    string firstNum;
    //container for buffering all our strings
    vector<string> bufferStrings;
    getline(cin,firstNum);
    int i = stoi(firstNum);
    //read line by line and save every line in our buffer-container
    for(i>=1; i--;){
        getline(cin,wordInput);
        //append the new string to our buffer
        bufferStrings.push_back(wordInput);
    }
    //now iterate through the buffer and write everything to cout
    for(int index = 0; index < bufferStrings.size(); ++index) {
        if (bufferStrings[index].length() > 10){
            wordToNumbers(bufferStrings[index]);
        } else {
            cout <<bufferStrings[index] <<endl;
        }
    }
    return 0;
}

可能这不是最好或最漂亮的解决方案,但它应该很容易理解:)