Добавил:
Angel_of_Death
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#pragma warning(disable : 4996)
#include "stdafx.h"
#include "Str.h"
#include <iostream>
#include <cstring>
using namespace std;
Str::Str()
{
cout << "Enter the string: ";
cin.getline(s, 300);
num = NumWord();
}
Str::Str(Str& str)
{
strcpy_s(s,str.GetS());
num = NumWord();
}
char* Str::GetS()
{
return s;
}
int Str::NumWord()
{
int n = 1;
for (int i = 0; s[i] != '\0'; i++)
if (s[i] == ' ')
n++;
return n;
}
void Str::Sort()
{
char **mass = new char*[num]; //разбиение строки на слова
for (int i = 0; i < num; i++)
mass[i] = new char[20];
char *tok = NULL;
char* p = strtok_s(s," .,;:",&tok);
for (int i = 0; i < num; i++)
{
for (int j = 0; j < 20; j++)
{
if (*p != ' ')
{
mass[i][j] = *p;
p++;
}
else
{
mass[i][j] = '\0';
break;
}
}
p = strtok_s(NULL, " .,-;:", &tok);
}
int count = 1; // сортировка слов по алфавиту
char *m; // buffer
while (count)
{
count = 0;
for (int i = 0; i < num - 1; i++)
if (((*mass[i] < 91 && *mass[i] > 64) && (*mass[i + 1] < 91 && *mass[i + 1] > 64) && (*mass[i] > *mass[i + 1])) ||
((*mass[i] < 123 && *mass[i] > 96) && (*mass[i + 1] < 123 && *mass[i + 1] > 96) && (*mass[i] > *mass[i + 1])) ||
((*mass[i] < 91 && *mass[i] > 64) && (*mass[i + 1] < 123 && *mass[i + 1] > 96) && (*mass[i] > (*mass[i + 1] - 32))) ||
((*mass[i] < 123 && *mass[i] > 96) && (*mass[i + 1] < 91 && *mass[i + 1] > 64) && ((*mass[i] - 32) > *mass[i + 1])))
{
m = new char[20];
m = mass[i + 1];
mass[i + 1] = mass[i];
mass[i] = m;
count++;
}
}
char str[300];
strcpy_s(str, mass[0]);
for (int i = 1; i < num; i++)
{
strcat_s(str, ", ");
strcat_s(str, mass[i]);
}
cout << str << endl;
}
void Str::Print()
{
cout << s << endl;
}
Str::~Str()
{
}