如何编写一个不使用 strrev 函数的 C 语言字符串反转程序,并附带示例?为了演示这一点,我们将使用 for 循环、while 循环、函数和指针。
C 语言使用 for 循环反转字符串程序
此程序允许用户输入任何字符数组。接下来,它将使用 for 循环迭代每个字符,并将字符以相反的顺序保存。
#include <stdio.h>
#include <string.h>
int main()
{
char Str[100], RevStr[100];
int i, j, len;
printf("\n Please Enter any Text : ");
gets(Str);
j = 0;
len = strlen(Str);
for (i = len - 1; i >= 0; i--)
{
RevStr[j++] = Str[i];
}
RevStr[i] = '\0';
printf("\n And the Result of It is = %s", RevStr);
return 0;
}

从上面的 C 编程 截图可以看出,
str[] = Hello
j = 0
len = strlen(Str) = 5。
strlen 函数用于获取输入字符串的长度。让我们在编程流程中使用该长度。请参考 strrev 函数。
For 循环 第一次迭代:for (i = len – 1; i >= 0; i–)
=> for (i = 5 – 1; 4 >= 0; 4–)
条件 (4 >= 0) 为 True。
RevStr[j++] = Str[i]
RevStr[0] = Str[4] = 0
第二次迭代:for (i = 4 – 1; 3 >= 0; 3–)
条件 (3 >= 0) 为 True。
RevStr[1] = Str[3] = l
C 语言字符串反转程序的第三次迭代:for (i = 3 – 1; 2 >= 0; 2–)
条件 (2 >= 0) 为 True。
RevStr[2] = Str[2] = l
第四次迭代:for (i = 2 – 1; 1 >= 0; 1–)
条件 (1 >= 0) 为 True。
RevStr[3] = Str[1] = e
第五次迭代:for (i = 1 – 1; 0 >= 0; 0–)
条件 (0 >= 0) 为 True。
RevStr[4] = Str[0] = H
接下来,For 循环中的条件将失败。
字符串反转示例 2
在此程序中,我们没有将结果存储在单独的数组中,而是直接以反向顺序打印了字符串字符。
#include <stdio.h>
#include <string.h>
int main()
{
char Str[100];
int i, ln;
printf("\n Before : ");
gets(Str);
ln = strlen(Str);
printf("\n After : ");
for (i = ln - 1; i >= 0; i--)
{
printf("%c", Str[i]);
}
return 0;
}
Before : Tutorial Gateway
After: yawetaG lairotuT
在此示例中,我们使用临时变量来更改字符的位置。这就像一个使用交换技术的字符串反转程序。
/* using temp variable */
#include <stdio.h>
#include <string.h>
int main()
{
char Str[100], temp;
int i, j, len;
printf("\n Actual : ");
gets(Str);
len = strlen(Str) - 1;
for (i = 0; i < strlen(Str)/2; i++)
{
temp = Str[i];
Str[i] = Str[len];
Str[len--] = temp;
}
printf("\n Result = %s", Str);
return 0;
}
Actual : C Programming
Result = gnimmargorP C
使用函数反转字符串的程序
此示例与上面相同。但是,我们这次使用的是 递归 函数 来反转原始字符串,并将逻辑与主程序分离。
#include <stdio.h>
#include <string.h>
void revText(char [], int, int);
int main()
{
char Str[100], temp;
int i, j, len;
printf("\n Please Enter : ");
gets(Str);
len = strlen(Str);
revText(Str, 0, len -1);
printf("\n After = %s", Str);
return 0;
}
void revText(char Str[], int i, int len)
{
char temp;
temp = Str[i];
Str[i] = Str[len - i];
Str[len - i] = temp;
if (i == len/2)
{
return;
}
revText(Str, i + 1, len);
}
Before : Learn Programming
After = gnimmargorP nraeL
使用指针反转字符串的 C 语言程序
这个字符串反转 程序 与上面相同,但这次我们使用 指针 来将逻辑与主函数分离。
#include <stdio.h>
#include <string.h>
char* textRe(char *Str)
{
static int i = 0;
static char RevStr[10];
if(*Str)
{
textRe(Str + 1);
RevStr[i++] = *Str;
}
return RevStr;
}
int main()
{
char Str[100], temp;
int i, j, len;
printf("\n Enter : ");
gets(Str);
printf("\n Result = %s", textRe(Str));
return 0;
}
