Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > вопрос по поводу пробелов в предложении


Автор: 4aineG 14.8.2008, 09:52
А как мне в своем коде изменить чтобы вместо «_» при наборе предложения можно ставить пробелы, пытаюсь вводить через консоль с пробелами: выводит и работает только с одним словом

Код

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

class Line
{
private:

    char *Line1; 
    int length;

public:

    Line()
    {
        length = 1;
        Line1 = new char[length];
        Line1[length-1] = '\0'; 
    }

    Line(const char* L1)
    {
        length = strlen(L1)+1;
        Line1 = new char[length];
        strcpy(Line1, L1);
        Line1[length-1] = '\0';
    }

    friend ostream& operator << (ostream& out , Line& l);
    friend istream& operator >> (istream & in, Line &l);
    Line operator - (char letter);
    bool operator == (Line l);
    int CountWordsInLine();
    char* ReverseLine(); 
    void DrawStar();

    ~Line()
    {
        delete [] Line1;
    }
};

int Line::CountWordsInLine()
    {
        int Count=0;
        for(int i=0; i<length; i++)
    {
        if (Line1[i]==' ')
            Count++;
    }
        Count++;
        return Count;
    }

char* Line::ReverseLine() 
    {
        for (int i=0; i<(length-1)/2; i++)
    {
        char temp = Line1[i];
        Line1[i] = Line1[length-i-2];
        Line1[length-i-2] = temp;
    }
        return Line1;
    }

void Line::DrawStar()
{
    for (int i=0; i<45; i++)
        cout << '*';
    cout << endl;
}

istream & operator >> (istream & in, Line& l)
    {
        char *temper = new char[100];
        in >> temper;
        l.length = strlen(temper)+1;
        temper[l.length-1] = '\0'; 
        l.Line1 = new char[l.length];
        strcpy(l.Line1, temper);
        l.Line1[l.length-1] = '\0';
        return in;
    }

    ostream& operator << (ostream& out, Line& l)
    {
        return out << l.Line1;
    }

    Line Line::operator - (char letter)
    {
        char *temp = new char[length];
        int i,j;
        for (i=0, j=0; i<length; i++)
        {
            if (Line1[i] != letter)
            {
                temp[j] = Line1[i];
                j++;
            }
        }
        temp[j] = '\0';
        return temp;
    }

    bool Line::operator == (Line l)
    {
        int i, j;
        for (i=0, j=0; i<length-1, j<length-1; i++, j++)
            if (Line1[i] == l.Line1[j])
                return true;
        return false;
    }

int main()
{
    Line ln1;
    Line ln2("What's up niger");
    cout << "enter sentence: "; 
    cin >> ln1;
    cout << "normal sentece: " << ln1 << endl;

    if(ln1 == ln2)
        cout << "sentences are equal" << endl;
    else
        cout << "sentences are not equal" << endl;
    cout << "number of words: " << ln1.CountWordsInLine() << endl;
    ln1.DrawStar();
    cout << "enter letter: ";
    char temp;
    cin >> temp;
    cout << "without letter: " << ln1 - temp << endl;
    cout << "reversed sentence: " << ln1.ReverseLine() << endl;
    
    return 0;
}


Автор: ama_kid 14.8.2008, 10:05
Цитата(4aineG @  14.8.2008,  09:52 Найти цитируемый пост)
А как...
в функции 
Код
istream & operator >> (istream & in, Line& l)
замени строку
Код
in >> temper;
на
Код
in.getline(temper,100);

Автор: cutwater 14.8.2008, 16:36
если предложение больше 100 символов - не есть гуд
ИМХО лучше воспользоваться 
Цитата

  function getline
  istream& getline( istream& is, string& s, char delimiter = '\n' )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)