/*
* File: main.c
* Author: Micren
*
* Created on 26 Октябрь 2010 г., 18:13
*/
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
*
*/
// Разделители. По условию - табуляция и пробел
const char DELIMITERS[] = " \t";
// Ф-я принимает адреса исходной и конечной строк.
// Делает работу согласно условия и возвращает длину результирующей строки
// Если dst==NULL то ф-я просто считает длину результирующей строки
size_t process(const char* const src, char* dst);
int main(int argc, char** argv)
{
// Вводим строку
char str[LINE_MAX];
printf("Введите строку:\n");
if (!fgets(str, LINE_MAX, stdin))
{
return EXIT_FAILURE;
}
// fgets() читает и символ перевода строки. Удалим его.
size_t str_size = strlen(str);
if (str_size && str[str_size - 1] == '\n')
{
str[str_size - 1] = 0;
}
printf("Исходная строка:"%s"\n", str);
// Подсчитаем размер результирующей строки
size_t dst_size = process(str, 0);
char *dst = malloc(dst_size);
if (!dst)
{
fprintf(stderr, "Not enough memory\n");
return EXIT_FAILURE;
}
process(str, dst);
printf("Результат:"%s"\n", dst);
free(dst);
return (EXIT_SUCCESS);
}
size_t process(const char* const src, char* dst)
{
if (!src)
{
fprintf(stderr, "size_t process(const char* const src_str, char* dst_str): Не верный параметр src_str\n");
exit(EXIT_FAILURE);
}
// Количество символов
int count = 0;
// strtok() изменяет исходную строку поэтому скопируем ее куда-нибудь
char* buffer = malloc(strlen(src) + 1);
if (!buffer)
{
fprintf(stderr, "Not enough memory\n");
exit(EXIT_FAILURE);
}
strcpy(buffer, src);
// Идем по строке в поисках лексем
char* current = strtok(buffer, DELIMITERS);
while (current)
{
// Будем использовать для нахождения нечетных мест
// Нумерация символов в слове с 1, а не с 0.
// Если надо другое - измените
int flag = 1;
for (; *current; ++current, ++flag)
{
if (flag & 1)
{
continue;
}
++count;
if (dst)
{
*dst++ = *current;
}
}
current = strtok(0, DELIMITERS);
// Имеет ли смысл добавлять пробел?
if (current && current[1] && count)
{
++count;
if (dst)
{
*dst++ = ' ';
}
}
}
if (dst)
{
*dst = 0;
}
free(buffer);
return count + 1;
}
~/NetBeansProjects/180442/dist/Debug/GNU-Linux-x86> ./180442
Введите строку:
1234 5678
Исходная строка:"1234 5678"
Результат:"24 68"
~/NetBeansProjects/180442/dist/Debug/GNU-Linux-x86> ./180442
Введите строку:
1 23 456 7890
Исходная строка:" 1 23 456 7890 "
Результат:"3 5 80"
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.