单词是以空格为间隔的,仔细消化谭浩强书上的例题,可以成功解决问题。
【输入】
源字符串。
【输出】
逆序后的字符串。
【返回值】
单词个数。
#include <stdio.h>
/*************************************************************************************
** 函数名称: ReverseWords()
** 作 者: zyh
** 版 本: 1.0.0
** 日 期: 2011-10-29
** 功能描述: 输入一个字符串,将其单词逆序输出
** 输 入: 字符串
** 输 出: 结果字符串指针数组
** 返 回 值: 字符串中单词个数
** 其 他:
** 修改历史:
1. 修改时间:
修 改 者:
版 本:
修改简述:
2. ......
**************************************************************************************/
int ReverseWords(char *str,char *resultWords[])
{
int wordStart = 0; /* 判断单词是否开始,注意初始化 */
int wordCount = 0; /* 统计单词个数,注意初始化 */
char *tempWords[256]; /* 指针数组,用来存放每个单词的起始地址 */
int i; /* 循环控制变量,遍历原始字符串 */
int j; /* 循环控制变量,控制单词地址 */
for (i = 0; str[i] != '\0'; i++)
{
if (str[i] == ' ') /* 如果当前字符为空格,则表示不是单词 */
{
wordStart = 0; /* 表示符置零 */
str[i] = '\0'; /* 将非字母全部填充为\0 */
}
else /* 如果当前字符不是空格,但是前面一个字符是空格,表示单词开始 */
if (wordStart == 0 )
{
wordStart = 1; /* 单词开始 */
tempWords[wordCount++] = &str[i]; /* 每个单词开始的字母的地址 */
}
}
for (j = 0; j < wordCount; j++)
{
resultWords[j] = tempWords[wordCount - 1 - j]; /* 逆转,为了逆序输出 */
}
return wordCount; /* 返回单词个数 */
}
int main(void)
{
char str[] = "I love China forever.";
char *resultWords[256]; /* 指针数组,用来存放结果单词的起始地址 */
int wordCount = ReverseWords(str,resultWords); /* 调用 */
for (int i = 0; i < wordCount; i++)
{
printf("%s ",resultWords[i]);
}
putchar('\n');
return 0;
}
调试运行结果如下: