Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // pppp.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <math.h>
- void towords( int numb, char *res, int rubKop )
- {
- int osn[ 11 ] = { 0, 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };
- char *basis[11][10]={
- { "","","","","","","","","",""},
- { "","один","два","три","четыре","пять","шесть","семь","восемь","девять"},
- { "","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
- { "","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},
- { "","одна","две","три","четыре","пять","шесть","семь","восемь","девять"},
- { "","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
- { "","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},
- { "","один","два","три","четыре","пять","шесть","семь","восемь","девять"},
- { "","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
- { "","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},
- { "","один","два","три ","четыре","пять","шесть","семь","восемь","девять"}};
- //массив окончаний
- char *termination[10][10]={
- {"","","","тысяч","","","миллионов","","","миллиардов"},
- {"","","","тысяча","","","миллион","","","миллиард"},
- {"","","","тысячи","","","миллиона","","","миллиарда"},
- {"","","","тысячи","","","миллиона","","","миллиарда"},
- {"","","","тысячи","","","миллиона","","","миллиарда"},
- {"","","","тысяч","","","миллионов","","","миллиардов"},
- {"","","","тысяч","","","миллионов","","","миллиардов"},
- {"","","","тысяч","","","миллионов","","","миллиардов"},
- {"","","","тысяч","","","миллионов","","","миллиардов"},
- {"","","","тысяч","","","миллионов","","","миллиардов"}};
- char *dec[ 10 ] = {"десять","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать","шестнадцать","семнадцать","восемнадцать","девятнадцать"};
- char *rubsKops[ 2 ][ 3 ] = {
- { "рубль", "рубля", "рублей" },
- { "копейка", "копейки", "копеек" } };
- int n1 = numb;
- int cnt = 0;
- while ( numb )
- {
- numb /= 10;
- ++cnt;
- }
- char result[ 400 ] = {};
- int celoe = 0, f = -1;
- while ( n1 )
- {
- if ( ! ( ( cnt + 1 ) % 3 ) )
- {
- if ( ( n1 / osn[ cnt ] ) == 1 )
- {
- n1 %= osn[ cnt ];
- --cnt;
- celoe = n1 / osn[ cnt ];
- n1 %= osn[ cnt ];
- strcat( result, dec[ celoe ] );
- --cnt;
- if ( !( cnt % 3 ) )
- {
- strcat( result, " " );
- strcat( result, termination[ 0 ][ cnt ] );
- strcat( result, " " );
- }
- if ( !cnt )
- f = celoe;
- }
- if ( !cnt )
- break;
- }
- celoe = n1 / osn[ cnt ];
- n1 %= osn[ cnt ];
- strcat( result, basis[ cnt ][ celoe ] );
- --cnt;
- strcat( result, " " );
- if ( !( cnt % 3 ) )
- {
- strcat( result, termination[ celoe ][ cnt ] );
- strcat( result, " " );
- }
- }
- result[ strlen( result ) - 1 ] = '\0';
- strcat( result, " " );
- if ( celoe == 1 && f < 0 )
- {
- strcat( result, rubsKops[ rubKop ][ 0 ] );
- }
- else if ( celoe >= 2 && celoe <= 4 )
- {
- strcat( result, rubsKops[ rubKop ][ 1 ] );
- }
- else
- {
- strcat( result, rubsKops[ rubKop ][ 2 ] );
- }
- strcpy( res, result );
- }
- int isNumber( char *s, int *isFloat )
- {
- int i, c = 0;
- while ( *s != '\0' && *s != '\n' )
- {
- if ( *s == '.' )
- ++c;
- else if ( ( *s ) < '0' || ( *s ) > '9' )
- return 0;
- ++s;
- }
- if ( c == 1 )
- *isFloat = 1;
- return 1;
- }
- void splitter( char *s, char *i, char *f )
- {
- char *ptr = strtok( s, "." );
- strcpy( i, ptr );
- ptr = strtok( NULL, "." );
- if ( ptr )
- strcpy( f, ptr );
- }
- void conversionString( char *str, char *newStr )
- {
- char word[ 400 ], temp[ 400 ], ww[ 400 ], ff[ 400 ];
- strcpy( newStr, "" );
- char *pointer = strtok( str, " !?" );
- char arr[ 50 ][ 400 ];
- int i, n = 0;
- while ( pointer )
- {
- strcpy( arr[ n++ ], pointer );
- pointer = strtok( NULL, " ?!" );
- }
- for( i = 0; i < n; ++i )
- {
- int isFloat = 0;
- if ( isNumber( arr[ i ], &isFloat ) )
- {
- if ( isFloat )
- {
- splitter( arr[ i ], ww, ff );
- towords( atoi( ww ), word, 0 );
- strcat( newStr, " " );
- strcat( newStr, word );
- towords( atoi( ff ), word, 1 );
- }
- else
- {
- towords( atoi( arr[ i ] ), word, 0 );
- }
- strcat( newStr, " " );
- strcat( newStr, word );
- }
- else
- {
- strcat( newStr, " " );
- strcat( newStr, arr[ i ] );
- }
- }
- newStr[ strlen( newStr ) - 1 ] = '\0';
- puts( newStr );
- }
- void readFile( FILE *f )
- {
- char str[ 400 ], newStr[ 400 ];
- while ( !feof( f ) )
- {
- fgets( str, 400, f );
- if ( !feof( f ) )
- conversionString( str, newStr );
- }
- }
- int main()
- {
- FILE *input;
- if ( ( input = fopen( "input.txt", "r" ) ) != NULL )
- {
- readFile( input );
- fclose( input );
- }
- else
- printf( "File is not found!\n" );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement