Здравствуйте.
Случайно наткнулся в журнале на задачи от одной компании, (название которой я писать не буду ибо не хочу что-то пиарить, пусть и на фоне), и решил размяться Да, решения этих задач можно отправить в компанию, не знаю зачем, какие-то призы вероятно, но срок уже истек, это сентябрьский номер, так что вы не подумайте что я преследую личную выгоду от того, что спрашиваю у вас что-либо по этому поводу.
Вообще дано 6 задач. Сейчас решил первую.
задача 1 |
---|
Дана строка "Hello, Embarcadero". Не обращая внимание на производительность, написать как можно больше вариантов , как поменять символы местами в обратном порядке. Варианты могут отличаться лишь синтаксисом. Можно использовать библиотечные функции работы со строками, но должны быть варианты и без них. |
\
Вот как я её решил
1 вариант
#include <stdio.h>
#include <string.h>
int swap_2symb(char* a, char* b)
{
char t = *a;
*a = *b;
*b = t;
return 0;
}
int reverse_in_place(char* s, size_t p)
{
for (size_t i=0; i < p / 2; ++i)
swap_2symb(s + i, s + p - 1 - i);
return 0;
}
int main()
{
char s[] = "Hello, Embarcadero";
printf("before: %s\n", s);
reverse_in_place(s, strlen(s));
printf("after: %s\n", s);
return 0;
}
2 вариант, аналогично, но реализовал функцию strlen
#include <stdio.h>
size_t strlen(const char* s)
{
size_t p = 0;
while (*s++)
++p;
return p;
}
3 вариант
int reverse_in_place(char* res, const char* s, size_t p)
{
for (size_t i = 0; i < p; ++i)
*(res + p - 1 - i) = *(s + i);
*(res + p) = '\0';
return 0;
}
char* reverse(const char* s)
{
size_t p = strlen(s);
char* res = (char*)malloc(sizeof(char)*(p+1));
reverse_in_place(res, s, p);
return res;
}
4 вариант, тут добавил указатели
int reverse_in_place(char* res, const char* s, size_t p)
{
for (int i = p - 1; i >= 0; --i)
*res++ = *(s + i);
*res = '\0';
return 0;
}
можно еще написать функцию принимающую адреса начала и конца строки, и делать её реверс, можно сделать реверс каждого слова, можно своп делать по-другому. Других вариантов в голову не приходит. Но ведь должен быть в задаче подвох ? Она кажется слишком простой. Как бы вы её решали ?
Кстати, в условии задачи меня смутила фраза про производительность. Что авторы хотели этим сказать ?
PS
остальные 5 задач выложу позже.