C 语言反转字符串程序

如何编写一个不使用 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 program to Reverse a String without using strrev

从上面的 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;
}
program to Reverse a String Using Pointers