Skip to content

Instantly share code, notes, and snippets.

@klopp
Created September 16, 2016 09:11
Show Gist options
  • Save klopp/2c5176bdd6579814fb2607dba0c5a728 to your computer and use it in GitHub Desktop.
Save klopp/2c5176bdd6579814fb2607dba0c5a728 to your computer and use it in GitHub Desktop.
Тестовое задание
#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
/* -----------------------------------------------------------------------------
* Написать функцию, которая меняет первые буквы слов на заглавные и сохраняет
* их в отдельную строку.
*
* Особенности реализации:
*
* 1. Память для результата выделяем динамически, она должна быть освобождена
* вызывающей стороной.
* 2. Подсчёт слов пропущен, выделяем максимально возможное количество памяти
* для результата.
---------------------------------------------------------------------------- */
#define DELIMITERS " \v\f\t\n\r.,!?;{}()[]<>\"\'`"
/* -------------------------------------------------------------------------- */
char *compress_to_upper( const char *source )
{
char *copy = strdup( source );
char *result = malloc( strlen( source ) + 1 );
char *token;
size_t idx;
if( !copy || !result ) {
free( result );
free( copy );
return NULL;
}
token = strtok( copy, DELIMITERS );
for( idx = 0; token; idx++ ) {
result[idx] = toupper( token[0] );
token = strtok( NULL, DELIMITERS );
}
result[idx] = 0;
return result;
}
/* -------------------------------------------------------------------------- */
int main()
{
char *upper = compress_to_upper( "some text for example" );
printf( "%s\n", upper ? upper : "[ERROR]" );
free( upper );
return upper == NULL;
}
/* -------------------------------------------------------------------------- */
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment