Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
4aineg
0 / 0 / 0
Регистрация: 07.08.2008
Сообщений: 23
#1

Как изменить код, чтобы он работал со строкой, содержащей пробелы? - C++

14.08.2008, 10:48. Просмотров 1007. Ответов 1
Метки нет (Все метки)

А как мне в своем коде изменить чтобы вместо «_» при наборе предложения можно ставить пробелы, пытаюсь вводить через консоль с пробелами: выводит и работает только с одним словом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#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;
  }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2008, 10:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как изменить код, чтобы он работал со строкой, содержащей пробелы? (C++):

Как переделать код, чтобы изменить интерфейс до неузнаваемости? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;fstream&gt; #include...

Исправить код парсера так, чтобы он работал только с буквами английского алфавита - C++
Есть программа, определяющая, расположены ли буквы во введенной строке в порядке, обратном алфавитному. Рабочая, опирается на...

Как изменить код программы чтобы все условия выполнялись должным образом? - C++
Здравствуйте! Вот код программы: #include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;math.h&gt; using namespace std; int t; ...

Стек. Что добавить в код, или как изменить его, чтобы в нём были структуры ? - C++
Программа выводит второй стек, состоящий из положительных элементов первого стека. Преподаватель сказал, что я сделал программу, как...

Дополнить матрицу строкой, содержащей максимумы по столбцам - C++
Дополнить матрицу строкой, содержащей максимумы по столбцам

Как изменить код, чтобы не было ошибки "expected initializer before void" - C++
В общем, компилятор почему-то ругается на 3 строку, говоря &quot;expected initializer before void&quot; Что ему тут не нравится -- ума не приложу....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Lord_Voodoo
Супер-модератор
8589 / 2189 / 61
Регистрация: 07.03.2007
Сообщений: 10,890
Завершенные тесты: 1
14.08.2008, 11:53 #2
используй функцию getline в функции >>, потому что иначе она пишет до первого пробела...
типа так:
Код
  istream & operator >> (istream & in, Line& l)
        {
              char *temper = new char[100];
              in.getline(temper, 100);
              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;
        }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2008, 11:53
Привет! Вот еще темы с ответами:

Как сделать, чтобы switch работал как цикл? - C++
Как сделать что бы switch работал как цикл ? Ну то есть: switch (n) case 1:break; {newfile1 (); } case 2:break;{newfile2 (); ...

В матрице поменять местами последнюю строку со строкой, содержащей наибольший элемент - C++
В матрицы из действительных отрицательных чисел поменять местами последнюю строку со строкой, содержащей наибольший элемент матрицы.

Поменять местами последнюю строку со строкой, содержащей минимальный элемент матрицы - C++
В заданной матрице поменять местами последнюю строку со строкой, содержащей минимальный элемент матрицы. Заранее спасибо

Поменять местами последнюю строку со строкой, содержащей минимальный элемент матрицы - C++
Дан вещественный массив а1, а2,…, аn. Если в этом массиве есть хотя бы один элемент, принадлежащий отрезку , то все элементы, не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru