/* Заменить в строке последовательности одинаковых символов (не пробелов)
на десятичное число, состоящее из двух десятичных цифр и соответствующее
их количеству (т.е. “ abcdaaaaa xyznnnnnnn ” на “abcd5a xyz7n ” */
/* G++/Code::Blocks */
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
enum {n=80};
char s[n];
int i, j, k;
char c;
int done=0;
gets(s);
j=0;
k=1;
c=s[0];
for (i=1; !done; i++)
{
if (s[i]==c)
if (s[i]==' ')
s[j++]=s[i];
else
k++;
else
{
if (k>9) /* две цифры */
s[j++]='0'+k/10;
if (k>1) /* одна цифра */
s[j++]='0'+k%10;
s[j++]=c;
c=s[i];
k=1;
if (s[i]=='\0')
done=1;
}
}
s[j]='\0';
puts(s);
system("pause");
return 0;
}
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
// Ф-я преобразования числа в строку
// Т.к. заведомо в задаче отрицательных чисел быть не может игнорируем это
char* itoa(int val)
{
#define BUF_LEN 32
static char buf[BUF_LEN] = {0};
int i = BUF_LEN - 1;
while (val && i)
{
buf[--i] = "0123456789"[val % 10];
val /= 10;
}
return buf + i;
}
// Решение задачи
void process(char* dest)
{
char* src = dest;
int count = 0;
// Перемещаемся по строке
while (*src)
{
// Если два подряд одинаковые и не пробел
if (*src == *(src + 1) && !isspace(*src))
{
// Увеличим счетчик
++count;
++src;
}
else
{
// Если не одинаковые и счетчик одинаковых не 0
if (count)
{
// Переводим в число
char* tmp = itoa(count + 1);
// Заменяем в строке
while (*tmp)
{
*dest++ = *tmp++;
}
// Обнулим счетчик
count = 0;
}
*dest++ = *src++;
}
}
*dest = 0;
}
int main()
{
// Буфер
char buf[BUFSIZ];
printf("string:");
// Ввод строки
if (!fgets(buf, BUFSIZ, stdin))
{
printf("I/O Error\n");
exit(EXIT_FAILURE);
};
// Удалим '\n' если есть
int len = strlen(buf);
if (len && buf[--len] == '\n')
{
buf[len] = 0;
}
process(buf);
printf("result:"%s"\n", buf);
return 0;
}
string:abcdaaaaa xyznnnnnnn
result:"abcd5a xyz7n"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
// Гласные
#define VOWELS "AEIOUY"
// Копирует гласные из строки src в dst
// Возвращает количество гласных символов(требуемый размер буфера без учета '\0'
// Если src==NULL - возвращает -1
// Если dst==NULL - ничего не копирует, просто возвращает необходимый размер буфера
int makeStr(char* dst, const char* src)
{
if (!src)
{
return -1;
}
// Множество допустимых символов
char vowels[] = VOWELS;
int count = 0;
// Перемещаемся по строке
while (*src)
{
// Позиция в множестве допустимых
char* pos;
// Приведение к верхнему регистру и проверка на наличие в множестве
if (pos = strchr(vowels, toupper(*src)))
{
++count;
// Копируем в строку
if (dst)
{
*dst++ = *src;
}
// Удалим из множества встретившийся символ
while (*pos++)
{
*(pos - 1) = *pos;
};
}
++src;
}
if (dst)
{
*dst = 0;
}
return count;
}
int main()
{
// Буфер
char buf[BUFSIZ];
printf("string:");
// Ввод строки
if (!fgets(buf, BUFSIZ, stdin))
{
printf("I/O Error\n");
exit(EXIT_FAILURE);
};
// Удалим '\n' если есть
int len = strlen(buf);
if (len && buf[--len] == '\n')
{
buf[len] = 0;
}
// Выделим память под буфер
char* result = malloc(makeStr(0, buf) + 1);
// Копируем гласные
makeStr(result, buf);
printf("result:"%s"\n", result);
// Освобождаем память
free(result);
return 0;
}
string:Aeeeaarhhjii
result:"Aei"
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.