Удаление\добавление пробелов

293
23 декабря 2017, 06:06

Вопрос такой : можно ли сделать ручной ввод для подобных заданий через cin ? Через обычный cin не получается ни добавить, ни удалить пробелы - выводит до первого пробела. То есть для подобных заданий нельзя использовать обычный cin, ибо будет выводить до первого пробела?(не getline и подобное)

#include <iostream>
using namespace std;
#include  <conio.h>
#include <stdio.h>
void main()
{
    setlocale(0, "rus");
    char nach1[] = "Its me      Dio ";
    char con1[50];
    int jj = 0;

    for (int i = 0; i < strlen(nach1 - 1); i++)
    {
        if (nach1[i] == ' ' && nach1[i + 1] == ' ')continue;
        con1[jj] = nach1[i], jj++;
    }
    con1[jj] = 0;
    char* vr = con1;
    if (con1[0] == ' ')vr++;
    cout << vr << endl << endl;
    _getch();
}
Answer 1

Вас интересует поведение оператора чтения C-строк из потока. В справке написано:

Extracts characters from is and stores them in s as a c-string, stopping as soon as either a whitespace character is encountered or (width()-1) characters have been extracted (if width is not zero). A null character (charT()) is automatically appended to the written sequence. The function then resets width to zero.

Другими словами, читать он будет только до того символа, для которого isspace вернет true. Оператор чтения std::string из потока ведет себя аналогично:

This function overloads operator>> to behave as described in istream::operator>> for c-strings, but applied to string objects.

Но это ведь C++. Любую проблему можно решить при помощи макросов и шаблонов собственных классов и перегрузки операторов:

#include <iostream>
#include <string>
class Line{
    std::string _string;
public:
    Line(const std::string &string = std::string()):
        _string(string)
    {}
    operator std::string() const{
        return _string;
    }
    friend std::istream& operator>>(std::istream& is, Line &line);
    friend std::ostream& operator<<(std::ostream& os, const Line &line);
};
std::istream& operator>>(std::istream& is, Line &line){
    std::getline(is, line._string);
    return is;
}
std::ostream& operator<<(std::ostream& os, const Line &line){
    os << line._string;
    return os;
}
int main(){
    Line name;
    std::cout << "What is your name? "; //Chandler Bing
    std::cin >> name;
    std::cout << "Hello, " << name << "!\n"; //Hello, Chandler Bing!
}
READ ALSO
Проблема с переходом в циклах

Проблема с переходом в циклах

Всем привет! Решил написать программу на с++, уже заканчивал делать и понеслаааась:

229
Перегрузка оператора operator=

Перегрузка оператора operator=

Мне нужно самой написать для класса String оператор operator=Но он не правильно работает

204
Паттерн Builder в С++

Паттерн Builder в С++

Здравствуйте, на языке Java построил вот такой шаблон Builder:

238
Приведение void* к указателю на метод

Приведение void* к указателю на метод

Возникли трудности в процессе написания динамической библиотеки, содержащей реализацию методов классаБиблиотека подключается к главному...

215