Возможно, вы сильно усложняете изменение строки. Все, что вам нужно знать, это длина исходной строки (и то, что она будет соответствовать месту назначения), а затем в ее основной форме вы можете преобразовать источник в dest с помощью простого цикла for
с использованием индексов, например,
void reverse (char *dst, const char *src)
{
size_t i, j = strlen(src);
for (i = 0; src[i]; i++) /* loop over each char in src */
dst[i] = src[--j]; /* decrement j, reverse copy to dst */
dst[i] = src[i]; /* nul-terminate dst */
}
( примечание: порядок параметров src
и dst
переключается в соответствии с другими строковыми функциями, такими как strcpy
и т. Д.)
Теперь это далеко не завершено. Вы хотите / нуждаетесь в дополнительных проверках, чтобы убедиться, что ваши параметры действительны и что обратная исходная строка помещается в предоставленный целевой буфер. Добавив проверки, вы можете сделать что-то вроде следующего, чтобы сделать вещи немного более устойчивыми, например,
#define MAXC 1024
void reverse (char *dst, const char *src)
{
size_t i, j;
/* validate src and dest not NULL */
if (src == NULL || dst == NULL) {
fputs ("error: NULL paraemter passed.\n", stderr);
return;
}
j = strlen(src); /* get index of last char in src */
if (j >= MAXC) { /* validate reversed src fits in dst */
fputs ("error: src exceeds MAXC - 1.\n", stderr);
*dst = 0; /* set dst to empty-string */
return;
}
for (i = 0; src[i]; i++) /* loop over each char in src */
dst[i] = src[--j]; /* decrement j, reverse copy to dst */
dst[i] = src[i]; /* nul-terminate dst */
}
Добавив необходимые #include
файлы и краткий пример программы, которая обратит строку, указанную в качестве 1-го аргумента программы (или отменит "Welcome to CMPSC 311!"
по умолчанию, если аргумент не предоставлен), вы можете сделать:
#include <stdio.h>
#include <string.h>
#define MAXC 1024
...
int main (int argc, char **argv)
{
char *s = argc > 1 ? argv[1] : "Welcome to CMPSC 311!",
rev[MAXC];
reverse (rev, s);
printf ("original: %s\nreversed: %s\n", s, rev);
}
Пример использования / Вывод
$ ./bin/reverse
original: Welcome to CMPSC 311!
reversed: !113 CSPMC ot emocleW
Или, передав строку в качестве ввода в программу:
$ ./bin/reverse "My dog has fleas and my cat has none."
original: My dog has fleas and my cat has none.
reversed: .enon sah tac ym dna saelf sah god yM
Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.