Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик1.doc
Скачиваний:
19
Добавлен:
01.05.2014
Размер:
160.77 Кб
Скачать

9. Заключение

Создание данной программы явилось первым шагом к написанию приложений, имеющих практическое значение. В результате выполнения поставленной задачи были получены огромные практические навыки работы на языке Си. Был приобретен опыт работы со строками, функциями, динамической памятью и операторами цикла.

10. Текст программы

#include<conio.h>

#include<stdio.h>

#include<alloc.h>

#include<string.h>

#define END "end"

// Cool'ное меню

void Menu()

{

printf( "\n\t\t ▓▓ ▓▓ ▒▒▒▒▒▒ ▓▓ ▓▓ ▒▒ ▒▒▒▒▒ ");

printf( "\n\t\t ▓▓▓ ▓▓▓ ▒▒ ▓▓ ▓▓ ▒▒ ▒▒ ▒▒ ");

printf( "\n\t\t ▓▓ ▓ ▓▓ ▒▒▒▒▒ ▓▓▓▓▓▓▓ ▒▒▒▒▒▒ ▒▒ ");

printf( "\n\t\t ▓▓ ▓▓ ▒▒ ▓▓ ▓▓ ▒▒ ▒▒ ▒▒ ");

printf( "\n\t\t ▓▓ ▓▓ ▒▒▒▒▒▒ ▓▓ ▓▓ ▒▒ ▒▒▒▒▒ \n\n ");

printf( "\n\n\t1 Справка." );

printf( "\n\n\t2 Ввод текста." );

printf( "\n\n\t3 Вывод текста." );

printf( "\n\n\t4 Условие формирования нового текста." );

printf( "\n\n\t5 Вывод нового текста." );

printf( "\n\n\t6 Выход. " );

}

void Help()

{

puts( "\n\n\tЭта программа предназначена для формирования нового текста, который" );

puts( " является результатом следующего преобразования исходного текста: заменить" );

puts( " заданное слово на другое слово столько раз, сколько оно встречается в" );

puts( " первой строке текста" );

puts( "\n\t Ввод текста пользователем заканчивается словом end, введенным через" );

puts( " пробел от остального текста. Максимальное кол-во строк - 25. А максимальная" );

puts( " длина слов для замены – 15 символов. ");

puts( "\n\n\t\t\t\tThis programme made by \1 Yura \1" );

puts( "\n\t\t\t\t\t\2 C вопросами обращаться в группу 3371 \2" );

getch();

}

// Проверяем - является ли символ разделитилем

int CharIsDevider( char Char )

{

if( Char == '\t' || Char == ' ' || Char == '.' || Char == ','|| Char == ';'|| Char == ':'|| Char == '!'|| Char == '?' )

return 1;

else

return 0;

}

// Return length of Word

int GetWord( char *Str, int *pPos, char *Word )

{

int iStrLen = strlen( Str );

Word[0] = '\0';

int iWordLen = 0;

while( *pPos < iStrLen )

{

if( CharIsDevider( Str[*pPos] ) && iWordLen != 0 )

{

if( !CharIsDevider( Word[iWordLen - 1] ) )

{

Word[iWordLen] = '\0';

return iWordLen;

}

}

else if( iWordLen != 0 )

{

if( CharIsDevider( Word[iWordLen - 1] ) )

{

Word[iWordLen] = '\0';

return iWordLen;

}

}

Word[iWordLen] = Str[*pPos];

iWordLen++;

(*pPos)++;

}

Word[iWordLen] = '\0';

return iWordLen;

}

// Убираем пробелы в конце строки

void StrStrim( char *Str )

{

for( int i = strlen( Str ) - 1; i >= 0; i-- )

if( CharIsDevider( Str[i] ) )

Str[i] = '\0';

else

i = -1;

}

void _gets( char *Str, int Limit)

{

int Count = 0;

while( Str[Count] != 13 && Count < Limit )

{

Str[Count] = getch();

if( Str[Count] == 13)

continue;

else

Count++;

}

if( Limit == 79)

puts("");

Str[Count] = 0;

}

// Получаем Массив строк

char **GetStr( int *pStrCount )

{

char Str[79];

char *szLastWord;

char **pResult = NULL;

int iEnd = 0;

*pStrCount = 0;

while( !iEnd )

{

_gets( Str, 79 );

char Word[80];

int iPosition = 0;

int iWordLen = 0;

while( (iWordLen = GetWord( Str, &iPosition, Word )) && !iEnd )

{

if( !strcmp( Word, END ) )

{

iEnd = 1;

Str[iPosition - iWordLen] = '\0';

StrStrim( Str );

}

}

int iStrLen = strlen( Str );

if( iEnd && iStrLen == 0 )

{

continue;

}

else

{

if( *pStrCount == 0 )

pResult = (char**)malloc( sizeof(char*) );

else

pResult = (char**)realloc( pResult, (*pStrCount + 1)*sizeof(char*) );

if( pResult == NULL )

{

*pStrCount = 0;

return NULL;

}

pResult[*pStrCount] = (char*)malloc( (iStrLen + 1)*sizeof(char) );

if( pResult[*pStrCount] != NULL )

strcpy( pResult[*pStrCount], Str );

(*pStrCount)++;

}

}

return pResult;

}

// Выводим массив строк

void PutStr( char **StrArray, int l )

{

int i;

clrscr();

puts( "\nВведены строки\n" );

if( StrArray == NULL )

{

return;

}

for( i = 0; i < l; i++ )

if( StrArray[i] != NULL )

puts( StrArray[i] );

}

// Считаем количество вхождений СЛОВА в СТРОКЕ

int CountWord( char *Str, char *Tamplate )

{

int iPos = 0;

int iCount = 0;

char Word[64];

while( GetWord( Str, &iPos, Word ) )

{

if( !strcmp( Word, Tamplate) )

iCount++;

}

return iCount;

}

// ДИНАМИЧЕСКИ добавляем в конец строки слово

void AddToStr( char **Str, char *Word )

{

int iLen = strlen( Word ) + 1;

if( *Str == NULL )

{

*Str = (char*)malloc( iLen * sizeof(char) );

if( *Str == NULL )

return;

strcpy( *Str, Word );

}

else

{

iLen += strlen( *Str );

*Str = (char*)realloc( *Str, iLen * sizeof(char) );

if( *Str == NULL )

{

return;

}

strcat( *Str, Word );

}

}

// Заменяем в строке занное СЛОВО на другое СЛОВО

char* ChangeStr( char *Str, char *Chto, char *NaChto, int *iCount )

{

char *pResult = NULL;

int iPos = 0;

char Word[60];

while( GetWord( Str, &iPos, Word ) )

{

if( strcmp( Word, Chto ) || *iCount == 0 )

AddToStr( &pResult, Word );

else

{

AddToStr( &pResult, NaChto );

(*iCount)--;

}

}

return pResult;

}

// Создаем новый массив строк с измененными словами

char **ChangeArray( char **StrArray, int iStrCount )

{

char Chto[15] = "";

char NaChto[15] = "";

printf( "\nВведите слово, которое вы хотите заменить " );

_gets( Chto, 15 );

printf( "\nВведите слово, на которое Вы хотите заменить заданное слово ");

_gets( NaChto, 15);

if( iStrCount == 0 )

return NULL;

char **pResult = (char**)malloc( iStrCount*sizeof(char*) );

if( pResult == NULL )

return pResult;

pResult[0] = (char*)malloc( (strlen(StrArray[0]) + 1)*sizeof(char) );

if( pResult != NULL )

strcpy( pResult[0], StrArray[0] );

int iRepeatCount = CountWord( StrArray[0], Chto );

for( int i = 1; i < iStrCount; i++ )

pResult[i] = ChangeStr( StrArray[i], Chto, NaChto, &iRepeatCount );

return pResult;

}

void FreeMassive( char **massive, int RowCount )

{

if( massive == NULL)

return;

for( int i = 0; i < RowCount; i++ )

delete massive[i];

delete massive;

}

// Основная функция программы =)

void main()

{

int iStrCount = 0;

char **ChangeArrey = NULL;

char **StrArray = NULL;

char **NewStr = NULL;

unsigned char e;

do

{

clrscr();

Menu();

e = getch();

switch( e )

{

case '1':

clrscr();

Help();

break;

case '2':

clrscr();

FreeMassive( StrArray, iStrCount);

StrArray = GetStr( &iStrCount );

break;

case '3':

clrscr();

if( StrArray != NULL )

PutStr( StrArray, iStrCount );

else

printf( "\nТекст не сформирован!" );

getch();

break;

case '4':

clrscr();

FreeMassive( NewStr, iStrCount);

if( StrArray != NULL )

NewStr = ChangeArray( StrArray, iStrCount );

else

{

printf( "\nМассив не сформирован!" );

getch();

}

break;

case '5':

clrscr();

if( NewStr != NULL )

PutStr( NewStr, iStrCount );

else

printf( "\nМассив не сформирован!" );

getch();

break;

default:

break;

}

}

while( e != '6' );

FreeMassive( NewStr, iStrCount);

FreeMassive( StrArray, iStrCount);

}

Соседние файлы в предмете Программирование