Конструктор класса, C++, Visual Studio 2008
Добрый день!
Помогите разобраться с ошибкой.
Задание программы:
Ввести в программу текст, отсортировавать слова по количеству повторений - от большего к меньшему, вывести текст на экран.
Код программы:
Выдаваемые компилятором ошибки:
Ошибка 5 error C2062: тип "char" не требуется k:\учёба\разработка и стандартизация\la3\la3\la3.cpp 48 la3
Ошибка 6 error C2143: синтаксическая ошибка: отсутствие ";" перед "{" k:\учёба\разработка и стандартизация\la3\la3\la3.cpp 49 la3
Ошибка 7 error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа) k:\учёба\разработка и стандартизация\la3\la3\la3.cpp 49 la3
В строках:
//Перегрузка конструктора копирование по умолчанию
Добрый день!
Помогите разобраться с ошибкой.
Задание программы:
Ввести в программу текст, отсортировавать слова по количеству повторений - от большего к меньшему, вывести текст на экран.
Код программы:
//Объявите класс с именем text. Объявите функцию show(), функция сортирования текста по возрастанию.
//Текст можно вставить любой, а сортировать по количеству букв в слове от меньшего к большему ну или на оборот.
//подключаемые файлы
#include <ctype>
#include <fstream>
//
#include <windows>
#include <iomanip>
#include "stdafx.h"
#include <string.h>
#include <locale>
#include <stdio.h>
#include <iostream>
//подключение поля namespase
using namespace std;
//класс текст
class Text
{
//скрытые элементы класса
private:
//указатель на слово
char* str;
//разсер
int size;
//количество овторений
int* k;
//буфер
public:
//Функция возврата массива символов
const char* Show(void);
//Функция сортировки слов (по возрастанию)
void SortWord(void);
//Перегрузка конструктора копирование по умолчанию
Text (char ttext);
//Конструктор по умолчанию
Text();
//Деструктор класса
~Text();
};
//Перегрузка конструктора копирование по умолчанию
Text (char ttext)
{
//delete str[];
//в прееменнуб длины записывает длину слова
size = strlen(ttext.str);
//заводим символьную переменную с вычисленны м размером
str = new char[size+1];
//заводим числовой массив частоты слов
k= new int[size+1];
//копируем в str строку
strcpy(str,ttext.str);
//возвращаемуказатель *this
return *this;
}
//Функция возврата массива символов
const char* Text::Show(void) // константный символьный указатель на функцию класса возвращает значение str
{
int Word = 0; //Счетчик слов
char** ArrWord = new char*[size+1]; //Массив слов
char *buffer = new char[size+1]; //Буферная переменная
char *ptr = buffer; //Указатель на буферную переменную
memset(buffer,0,size+1); //Обнулим буфрную переменную
char *pl;
char c = ' ';
for (int i=0; i <= strlen(str); i++) //Обойдем по-символьно всю строку
*pl = *strrchr(str, c);
int i = 0;
if (!pl) //Если не пробел
{
char *ptr;
*ptr++ = str; //Пишим в буферную переменную и сдвигаем указатель
i++;
}
else
if (strlen(buffer)>0) //Если же управляющий или разделитель и длина буферной переменной >0
{
ArrWord[Word] = new char[size+1]; //Выделим память под слово
strcpy(ArrWord[Word++],buffer); //Скопируем буферную переменную в слово
memset(buffer,0,size+1); //Обнулим память буферной переменной
ptr = buffer; //Поставим указатель на начало буферной переменной
}
else {}
char buf='0';
const char *buff = &buf;
strcpy(str,ArrWord[0]);
strcpy(str, buff);
strcpy(str, ArrWord[Word]);
//const int Word;
//const int kо=k[0];
//const int kw=k[Word];
//struct stroka
//{char str;
//int ko;
//int kw;};
return str;
k[0];
k[Word];
}
//Функция сортировки слов (по возрастанию)
void Text::SortWord(void)
{
int Word = 0; //Счетчик слов
char** ArrWord = new char*[size+1]; //Массив слов
char *buffer = new char[size+1]; //Буферная переменная
char *ptr = buffer; //Указатель на буферную переменную
memset(buffer,0,size+1); //Обнулим буфрную переменную
char *pl;
char c = ' ';
for (int i=0; i <= strlen(str); i++) //Обойдем по-символьно всю строку
{
*pl = *strrchr(str, c);
if (!pl) //Если не пробел
{
char *ptr;
*ptr++ = str; //Пишим в буферную переменную и сдвигаем указатель
k=1;
}
else
if (strlen(buffer)>0) //Если же управляющий или разделитель и длина буферной переменной >0
{
ArrWord[Word] = new char[size+1]; //Выделим память под слово
strcpy(ArrWord[Word++],buffer); //Скопируем буферную переменную в слово
memset(buffer,0,size+1); //Обнулим память буферной переменной
ptr = buffer; //Поставим указатель на начало буферной переменной
}
else {}
}
for (int i=0; i<Word-1; i++) /*в цикле обходим все лова*/
{for (int j=1; j<Word; j++)
{if (ArrWord==ArrWord[j]) /*если слова под обоими объектами одинаковы */
{k = k + 1;}/* количество повторений увеличиваем на 1*/
}}
//const char *bufer= &buffer;
//int k[size] = {1};
//int str_len = strlen(buffer);
//int i;
// for(i = 0; i < str_len; i++)
// {
// k[(unsigned char)str]++;
// }
memset(str,0,size+1); //Обнулим строку
//Сортируем слова по длине
//char Arrword[100];
for (int i = 0; i<Word-1; i++)//Обойдем весь массив слов
{
int mkol=k;//mkol присваивается значение k текущее
char * Max = ArrWord;// символьной переменной Max присваивается указатель на пермененную с индексом i массива Arrword
int pos = i; // значению целочисленной переменной pos присваивается значение i
for (int j=i; j<Word; j++) //Обойдем все слова с i
{
if (mkol < k[pos])
{
Max = ArrWord[j];
mkol = k[j];
pos = j;
}
if (ArrWord==Max)
{}
else
{strcpy(buffer, ArrWord);
strcpy (ArrWord,ArrWord[j]);
strcpy (ArrWord[j], buffer);
}
Max = ArrWord;
mkol = k;
pos = i;
strcat(str,ArrWord);
}
if ( (i+1) != Word) strcat(str," ");
}
for (int i = 0; i<Word; i++)
{
delete[] ArrWord;
}
delete [] buffer;
delete [] ArrWord;
}
//Деструктор класса
Text::~Text()
{
delete[] str;
}
// главный код программы
int _tmain(int argc, _TCHAR* argv[])
{
//поключение русского языка
setlocale(LC_ALL, "Russian");
//Тестирование класса Text
//инициализируем k
char ttext;
cout<<"введите текст"<< endl;
cin>> ttext;
//char * Value= &ttext;
Text K(ttext);
//выполняе выполнение функции для K объекта с текстом
K.SortWord();
//печатаем результат
std::cout<<K.Show()<<std::endl;
return 0;
}
Выдаваемые компилятором ошибки:
Ошибка 5 error C2062: тип "char" не требуется k:\учёба\разработка и стандартизация\la3\la3\la3.cpp 48 la3
Ошибка 6 error C2143: синтаксическая ошибка: отсутствие ";" перед "{" k:\учёба\разработка и стандартизация\la3\la3\la3.cpp 49 la3
Ошибка 7 error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа) k:\учёба\разработка и стандартизация\la3\la3\la3.cpp 49 la3
В строках:
//Перегрузка конструктора копирование по умолчанию
Text (char ttext)
{
//delete str[];
//в прееменнуб длины записывает длину слова
size = strlen(ttext.str);
//заводим символьную переменную с вычисленны м размером
str = new char[size+1];
//заводим числовой массив частоты слов
k= new int[size+1];
//копируем в str строку
strcpy(str,ttext.str);
//возвращаемуказатель *this
return *this;
}