**1、**程序
#include <stdio.h>
#include <string.h>
int strLen(char *);
void reverse(char *);
int main()
{
int count = 0;
char str[99];
printf ("请输入你想逆序的字符串:");
fgets (str, 99, stdin);
str[strlen(str)-1] = '\0';
/*
从从终端输入一个字符串到字符数组,
并且得到一个函数值。
该函数值是字符数组的起始地址。
第一个参数:字符数组
第二个参数:要读的数据长度
第三个参数:文件指针,用stdin代表标准输入
因为使用fgets()函数在输出时,会将字符串结束标志'\0'转换成'\n'
故需要将末端的置为'\0'
便于后面的判断
*/
reverse(str);//将整个句子逆序
char *p1 = str;
char *p2 = str;
while (*p2)//将单词逆序
{
if (' ' == *p2)//定位到第一个单词后的空格
{
*p2 = '\0';
reverse(p1);//将第一个单词逆序
*p2 = ' ';
p1 = p2 + 1;//将p1定位到第二个单词起始处
}
p2++;
}
reverse(p1);// 3、将最后一个单词逆序
printf ("%s\n", str);
return 0;
}
int strLen(char *pStr)
{
if (pStr == NULL)
return -1;
int len = 0;
while(*(pStr++))
{
len++;
}
return len;
}
void reverse(char *pStr)
{
int left = 0;
int right = strLen(pStr)-1;
while (left<right)
{
char tmp = pStr[left];
pStr[left++] = pStr[right];
pStr[right--] = tmp;
}
}
**2、**测试结果
请输入你想逆序的字符串:We are from ShangHai
逆序结果为:ShangHai from are We