利用一个字符数组作函数参数,实现字符串(最大长度为80个字符 )的逆序存放。

利用一个字符数组作函数参数,实现字符串(最大长度为80个字符 )的逆序存放。
要求如下:
(1)在子函数Inverse中实现字符串的逆序存放。函数原型为:
     void Inverse(char str[]);
(2)在主函数中
     从键盘输入字符串(使用gets函数)      
     然后,调用Inverse函数,
     最后,输出逆序后的字符串。
(3)**输入提示信息:"Input a string:\n"
   **输出提示信息:"Inversed results:\n"
   **输出格式:"%s\n"
程序运行示例:
Input a string:
qwertyu
Inversed results:
uytrewq

这道题的解答如下:

//字符串逆序函数:
void Inverse(char str[])
{
	int   len = 0, i, j;
	char temp;
	len = strlen(str);
	str[len - 1] = '\0';//减掉末尾的\n(如果是和fgets配套使用的话要加,和scanf使用配套使用时不用)
	len = strlen(str);
	j = len - 1;
	for (i = 0; i < j; i++, j--)//交换数据
	{
		temp = str[i];
		str[i] = str[j];
		str[j] = temp;
	}
}
int main()
{
	char str[80];
	printf("Input a string:\n");
	//scanf("%s", str);
	fgets(str, 80, stdin);
	printf("Inversed results:\n");
	Inverse(str);
	puts(str);
	return 0;
}

这道题目不难解,有一个重要的点是区分scanf和fgets,注意我注释中写到的.其中 str[len - 1] = '\0';//减掉末尾的\n(如果是和fgets配套使用的话要加,和scanf使用配套使用时不用)的意思是,如果用scanf读取数据的时候将这句话注释掉,不然会缺少数据,具体大家可以试试,发生这种情况的主要原因是scanf和fgets读取数据的差别:利用一个字符数组作函数参数,实现字符串(最大长度为80个字符 )的逆序存放。_第1张图片

注意第二点!给大家看看如果用scanf而且带有str[len - 1] = '\0';结果会怎么样:

利用一个字符数组作函数参数,实现字符串(最大长度为80个字符 )的逆序存放。_第2张图片

再看看注释掉之后:

利用一个字符数组作函数参数,实现字符串(最大长度为80个字符 )的逆序存放。_第3张图片

倘若用fgets的时候将str[len - 1] = '\0';注释掉会发生下面的情况:

利用一个字符数组作函数参数,实现字符串(最大长度为80个字符 )的逆序存放。_第4张图片

你可能感兴趣的:(字符串函数相关,c语言)