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

String1 - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вставка в файл и копирование из файла http://www.cyberforum.ru/cpp-beginners/thread249927.html
Здравствуйте, еще раз :) Я собирался написать виндовс гаджет аля толковый словарь через ПХП, но вообще мзабил на это и буду использывать свой С++ код. Не подскажите как сделать виндовс-гаджет который бы сохранял вводимое слово юзером из первого лайнедита (например) в текстовике 1 и далее брал "результат" (С++ код берет слово из 1 и выпоняет поиск по этому слову в словаре и далее вставляет...
C++ одномерный массив. Все его элементы, не равные нулю, переписать, сохраняя их порядок в начало массива, а нулевые элементы в конец массива in c++ одномерный массив. Все его элементы, не равные нулю, переписать, сохраняя их порядок в начало массива, а нулевые элементы в конец массива in c++ http://www.cyberforum.ru/cpp-beginners/thread249921.html
vector C++ присвоить в массив C++
Помогите пожалуйста найти неполадку в программе. Массиву из 10 целых чисел присвоить 10 целых чисел из вектора. Компилируется, но не выводит числа. #include <iostream> #include <vector> using namespace std; int main () { vector<int>ivec1 (10);
Вывод родословной на экран C++
Программа должна вывадить на экран твою родословность,от кого ты происхожденб,должно быть несколько строк
C++ Поиск элемента в одномерном массиве http://www.cyberforum.ru/cpp-beginners/thread249891.html
Помогите, пожалуйста, с решением задач: 1)Найти среднее арифметическое всех отрицательных элементов одномерного вещественного массива (если отрицательных нет – вывести сообщение). 2)Дана действительная матрица размера MхN, все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением, затем среди этих чисел выбирается наибольшее. Указать индексы элемента с...
C++ Библиотека для создания оконных приложений Всем доброго времени суток! Посоветуйте, на чем разрабатываются оконные приложения на С++. Насколько я понимаю, MFC неудобная и устаревшая (хотя я точно не знаю). Что вы можете посоветовать? подробнее

Показать сообщение отдельно
dimon1984
40 / 38 / 0
Регистрация: 22.01.2011
Сообщений: 670
28.02.2011, 15:55     String1
После долгих ковыряний задания из книги решил всётаки подсмотреть в ответы к упражнениям. Надо изменить класс String, наследовав его, чтобы при создании обьекта от производного класса String1 можно было предотвратить переполнение буфера при определении слишком большой строки.
Новый конструктор производного класса будет копировать в str только SZ-1 символов, если строка окажется слишком длинной, и будет копировать строку полностью, если она будет иметь длину меньшую, чем SZ.
Так дело в том, что попался такой ответ в книге, что тоже выдаёт ошибку:
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
#include <iostream>
#include <string>
using namespace std;
 
const int SZ=20;
/**/
class String         
{
  private:
    char str [ SZ ];  // массив для строки
  public:
    // конструктор без параметров
    String ( )
      { strcpy ( str, "" ); }
    // конструктор с одним параметром
    String ( char s [ ] )
      { strcpy ( str, s ); }
    // показ строки
    void display ( ) const
      { cout << str<<endl; }
    // оператор сложения
    String operator+ ( String ss ) const
      {
        String temp;  // временная переменная
        if ( strlen ( str ) + strlen ( ss.str ) < SZ )
        {
          strcpy ( temp.str, str );    // копируем содержимое первой строки
          strcat ( temp.str, ss.str ); // добавляем содержимое второй строки
        }
        else
        {
          cout << "\nПереполнение!";
          exit ( 1 );
        }
       return temp;  // возвращаем результат
      }
};
///////////////////////////////////////////////////////////
class String1: public String
{
private:
//  char st[SZ];         
public:
    String1 ( char s[ ] )
    {
        if(strlen(s)>SZ-1)        //проверка на переполнение
        {
            for(int i=0;i<SZ-1;i++)
                str[i]=s[i];
            str[i]='\0';
        }
        else String(s);          //по умолчанию
    }
//    void display ( ) const
//      { cout << st<<endl; }
};
 
///////////////////////////////////////////////////////////
int main ( )
{
    String1 s="hello world hello world hello world ";
    s.display();
 
 
    system("pause");
    return 0;
}
Как определить слишком длинную строку при создании обьекта?
Выдаёт ошибку в строке 49,50
for(int i=0;i<SZ-1;i++)
str[i]=s[i];
str[i]='\0';
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru