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

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

Войти
Регистрация
Восстановить пароль
 
Mashhha
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 21
#1

Исключить лишние пробелы между словами (комментарии) - C++

16.11.2011, 20:00. Просмотров 938. Ответов 8
Метки нет (Все метки)

Помогите пожалуйста разобраться в коде, писала не я, мало что тут понимаю, но мне нужны некоторые элементы этой задачи, чтобы решить свою напишите пожалуйста коменты
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
/*Создать 2 объекта разработанного класса. 
Одной из компонент класса является символьная строка. 
В результате выполнения программы в обоих объектах исключить лишние пробелы между словами (оставить только по одному). 
Содержимое объектов (их строки) до и после обмена вывести на экран. 
Функцию вывода содержимого объекта реализовать как внешнюю по отношению к классу.*/
 
#include <cstdlib>
#include <cstdio>
// Вместо следующих двух функций можно просто включить ctring
//#include <cstring>
 
size_t strlen(const char *value) {
  size_t result = 0;
  for (const char *symbol = value; *symbol != '\0'; ++symbol)
    ++result;
  return result;
}
 
char *strcpy(char *destination, const char *source) {
  char *result = destination;
  while (*source != '\0')
    *(destination++) = *(source++);
  *destination = *source;
  return result;
}
 
class String {
 public:
  typedef char* Iterator;
  String() : data_(NULL) {}
  String(const char *value)
    : data_(strcpy(new char[
                  strlen(value) + 1],
                  value)) {}
  String(const String &other) : data_(NULL) {
    Set(other);
  }
  ~String() { delete [] data_; }
  char *Set(const char *value) {
    delete [] data_;
    return data_ = strcpy(new char[strlen(value) + 1], value);
  }
  String &Set(const String &other) {
    Set(other.CStr());
    return *this;
  }
  void Normalize() {
    // вот тут нужно сделать функцию, которая удалит лишние пробелы
    for (char *i = data_; *i != '\0'; ++i)
      if (*i == ' ' && *(i - 1) == ' ') {
        char *j = i;
        while (*j == ' ') ++j;
        while (*j != '\0')
          *(i++) = *(j++);
        *i = *j;
      }
  }
  char *CStr() const { return data_; }
  size_t Size() const { return strlen(data_); }
  char &operator[](size_t position) { return data_[position]; }
  String &operator=(const String &other) {
    if (this != &other)
      return Set(other);
    return *this;
  }
 private:
  char *data_;
};
 
template <class Type>
void Swap(Type &a, Type &b) {
  Type c = a;
  a = b;
  b = c;
}
 
int main(int argc, char *argv[]) {
  String first = "This is the first     string.";
  String second = "This is  the second string..";
  printf("'%s' / '%s'\n", first.CStr(), second.CStr());
  first.Normalize();
  second.Normalize();
  Swap(first, second);
  printf("'%s' / '%s'\n", first.CStr(), second.CStr());
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2011, 20:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Исключить лишние пробелы между словами (комментарии) (C++):

Строка: Удалить лишние пробелы между словами - C++
Задание: нужно удалить лишние пробелы между словами (если один пробел, то его нужно оставить). # include &lt;conio.h&gt; # include...

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

Вывести на экран содержимое файла удалив лишние пробелы между словами - C++
помогите дописать программу на visual c++ Дан текстовый файл, в котором слова разделены 1 и более пробелами. Вывести на экран содержимое...

Удалить в строке лишние пробелы, оставив между словами ровно по одному - C++
Дана строка состоящая из слов, между которыми есть некое количество пробелов. Требуется удалить лишние пробелы, оставив между словами...

Работа с файлами. Удалить все лишние пробелы, оставив между словами не более одного пробела - C++
Дан текстовый файл. Удалить из него все лишние пробелы, оставив между словами не более одного пробела. Результат поместить в новый файл. ...

Убрать в текстовом файле ненужные пробелы, оставив между словами по одному, между предложениями по два. - C++
Мое задание: убрать в текстовом файле ненужные пробелы, оставив между словами по одному, между предложениями по два. Вот программа...

8
Сыроежка
Заблокирован
16.11.2011, 20:04 #2
В общих чертах у вас описан класс String, построенный на основе символьных массивов. Затем в главной функции объявляются два объекта этого класса, выводятся на экран. Затем из них удаляются пробелы, объякты обмениваются своим содержанием и снова выводятся на экран.
1
Mashhha
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 21
16.11.2011, 20:27  [ТС] #3
А можете указать момент, где объкты выводятся на экран?)
0
aeshes
441 / 204 / 13
Регистрация: 07.10.2011
Сообщений: 462
16.11.2011, 20:28 #4
Строка 80 и 84
1
Montanaa
5 / 5 / 1
Регистрация: 21.03.2011
Сообщений: 79
16.11.2011, 20:29 #5
Цитата Сообщение от Mashhha Посмотреть сообщение
А можете указать момент, где объкты выводятся на экран?)
C++
1
 printf("'%s' / '%s'\n", first.CStr(), second.CStr());
1
Сыроежка
Заблокирован
16.11.2011, 20:29 #6
Цитата Сообщение от Mashhha Посмотреть сообщение
А можете указать момент, где объкты выводятся на экран?)
Момент указать не могу, но строчки кода, которые выводят на экран строки могу показать. Это

C++
1
 printf("'%s' / '%s'\n", first.CStr(), second.CStr());
и

C++
1
  printf("'%s' / '%s'\n", first.CStr(), second.CStr());

То есть они на самом деле одинаковы, только одна стоит перед функцией swap, а другая после нее.
0
Mashhha
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 21
16.11.2011, 21:16  [ТС] #7
Спасибо может вы еще подскажите, какие строки нужно убрать, чтобы вместо того чтобы удалялись лишние пробелы, программа в объектах заменяла слово максимальной длины на слово минимальной длины?
0
Сыроежка
Заблокирован
16.11.2011, 21:22 #8
Цитата Сообщение от Mashhha Посмотреть сообщение
Спасибо может вы еще подскажите, какие строки нужно убрать, чтобы вместо того чтобы удалялись лишние пробелы, программа в объектах заменяла слово максимальной длины на слово минимальной длины?
Надо убрать эти две строчки

C++
1
2
  first.Normalize();
  second.Normalize();
Не совсем понятно, что означает заменить слово максимальной длины на слово минимальной длины? Это сделать для какого-то одного объекта, или нужно из двух строк строке с максимальной длиной присвоить строку с минимальной длиной?
1
Mashhha
0 / 0 / 0
Регистрация: 30.05.2011
Сообщений: 21
16.11.2011, 21:29  [ТС] #9
Вот как звучит мое задание:
Создать 2 объекта разработанного класса. Одной из компонент класса является символьная строка.
В результате выполнения программы в обоих объектах слово МАХ длины заменить на слово МIN длины. Содержимое объктов (их строки) до и после обмена вывести на экран.
0
16.11.2011, 21:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2011, 21:29
Привет! Вот еще темы с ответами:

Пробелы между словами\предложениями - C++
Помогите с заданием: Дан произвольный текст. Отредактировать текст так, чтобы: а) между словами был ровно один пробел; б)...

Отредактировать текст, удаляя лишние символы пробелов между словами - C++
Отредактировать текст,удаляя лишние символы пробелов между словами;по нажатию произвольной клавиши выделить первое предложение текста.

Не работает код (программа считывает из файла строку, убирает лишние пробелы и записывает в другой файл строку, словами наоборот) - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;algorithm&gt; using namespace std; string...

Напечатать текст, выпустив повторяющиеся пробелы между словами - C++
Здравствуйте, ПОМОГИТЕ пожалуйста! Напечатать текст, выпустив повторяющиеся пробелы между словами. (С++)


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

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

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