Есть ли лучший способ получить этот вклад? C ++ - PullRequest
0 голосов
/ 04 ноября 2019

В настоящее время просто пытаюсь отредактировать какой-то основной ввод, чтобы избавиться от единственного числа '.'в начале строки. Тем не менее, это работает только тогда, когда я заставляю EOF. Мой отзыв на это задание на сайте универа, похоже, застревает в цикле while и не выводит результат. Объем ввода может составлять до 1000 строк, и я не могу думать о том, как лучше всего получить этот ввод, если он не застрянет вот так. main.cpp ниже:

Пример ввода и вывода будет:

Input:
..hello
.hello
hello

Output:
.hello
hello
hello
#include <cstdlib>
#include <iostream>
#include <vector>
#include <cstring>

using namespace std;

int main(int argc, char *argv[])
{
    string inputLine;
    vector<string> vect;
    string s;
    string temp;

    while (getline(cin, s)) {
        vect.push_back(s);
    }

    for (int i = 0; i < (int)vect.size(); i++) {
        temp = vect[i];
        if (temp[0] == '.') {
            for (int k = 0; k < (int)temp.length(); k++) {
                temp[k] = temp[k + 1];
            }
        }
        vect[i] = temp;
    }

    for (int j = 0; j < (int)vect.size(); j++) {
        cout << vect[j] << endl;
    }



    return 0;
}

1 Ответ

1 голос
/ 04 ноября 2019

Тестер вашей программы, вероятно, открывает канал и ожидает, пока ваша программа выведет первую строку перед отправкой второй. Случай мертвой блокировки.

Если вы хотите игнорировать символ ., вы можете использовать std :: basic_istream :: peek , чтобы проверить, начинается ли строка с этого символа, а затемпросто std :: basic_istream :: ignore it. Вы также можете захотеть сбросить вывод для каждой строки, используя std::endl.

#include <string>
#include <iostream>

int main() {
    std::string line;
    while(std::cin) {
        if(std::cin.peek() == '.')
            std::cin.ignore();
        if(std::getline(std::cin, line))
            std::cout << line << std::endl;
    }
}
...