Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab1 / Lab1 / Str

.cpp
Скачиваний:
3
Добавлен:
10.04.2019
Размер:
1.89 Кб
Скачать
#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()
{
}
Соседние файлы в папке Lab1