/* * Program to read line of text and print in reverse, * several ways. */ #include #include #define SIZE 80 void print_line(char * line); void print_reverse_1(char * line); void print_reverse_2(char * line); void reverse_line(char * line); int main(void) { printf("enter line of text:\n"); char line[SIZE]; fgets(line, sizeof(line), stdin); /* was the line too long? */ char *endline = strchr(line, '\n'); if (endline == NULL) { printf("line too long\n"); } else { *endline = '\0'; puts("original line"); print_line(line); print_reverse_1(line); print_reverse_2(line); puts("line after reverse in place"); reverse_line(line); print_line(line); } return 0; } void print_line(char * line) { printf("'%s'\n", line); } void print_reverse_1(char * line) { puts("line in reverse, one way:"); putchar('\''); for (int i = strlen(line)-1; i >= 0; --i) { putchar(line[i]); } putchar('\''); putchar('\n'); } void print_reverse_2(char * line) { puts("line in reverse, another way:"); putchar('\''); for (char * p = line + strlen(line)-1; p >= line; --p) { putchar(*p); } putchar('\''); putchar('\n'); } void reverse_line(char * line) { char * left = line; char * right = line + strlen(line) - 1; while (left < right) { char temp = *left; *left = *right; *right = temp; left += 1; right -= 1; } }