Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 444c107

Browse files
Merge branch 'experimental'
2 parents f8e43d8 + 774e77b commit 444c107

File tree

1 file changed

+24
-14
lines changed

1 file changed

+24
-14
lines changed

‎chapter04/4-13.c

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,40 @@
1111
#define MAXLEN 1000
1212

1313
/* functions */
14-
void reverse(char []);
14+
void reverse(char s[]);
15+
void reverse_inplace(char str[], int begin, int end);
16+
void swap(char arr[], size_t i, size_t j);
1517

16-
/* reverse function: reverse string s in place, recursive version */
18+
/* reverse: interface function to reverse_inplace */
1719
void reverse(char s[])
1820
{
19-
int c;
20-
static unsigned long i = 0, j = 0;
21+
reverse_inplace(s, 0, strlen(s) - 1);
22+
}
23+
24+
/* reverse_inplace: reverse string s in place, recursive version */
25+
void reverse_inplace(char str[], int begin, int end)
26+
{
27+
if (begin > end) /* exit condition */
28+
return;
29+
swap(str, begin, end);
30+
reverse_inplace(str, ++begin, --end);
31+
}
32+
33+
/* swap: interchange v[i] and v[j] */
34+
void swap(char v[], size_t i, size_t j)
35+
{
36+
char tmp;
2137

22-
if (j < strlen(s) - 1) {
23-
++j;
24-
reverse(s);
25-
}
26-
if (i < j) {
27-
c = s[i];
28-
s[i++] = s[j];
29-
s[j--] = c;
30-
}
38+
tmp = v[i];
39+
v[i] = v[j];
40+
v[j] = tmp;
3141
}
3242

3343
int main(void)
3444
{
3545
char str[MAXLEN];
3646

37-
printf("Enter a string to reverse:\n");
47+
printf("Enter a string to reverse:");
3848
scanf("%s", str);
3949
reverse(str);
4050
printf("%s\n", str);

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /