今天,有个朋友看了我的一篇关于将句子中单词次序翻转并输出的文章,说这个程序只做到了输出,没有存储,实用不大。链接在下面!
http://blog.csdn.net/persistvonyao/article/details/16909199
对此,我思考良久,决心重写这个程序!
下面是我重写的程序:
#include <stdio.h>
#include <stdlib.h>
#define N 128
/*
* @author: 冯克
* @date: 2014.1.3
* @brief: 将输入的以空格隔开的字符串以单词为最小单位,逆序排列!
* @param: word_str 输入的字符串
* @return: success 返回排序好的字符串
* fail NULL
* */
char *convertwordsort(char *word_str)
{
char *buf;
int i = 0;
int j = 0;
int max = 0;
int tmp = 0;
int max2 = 0;
int min2 = 0;
/* 申请空间 */
buf = (char *)malloc(sizeof(char) * N);
/* 判断输入的字符串是否为空指针 */
if(word_str == NULL)
{
perror("it's NULL string! error");
return NULL;
}
/* 将字符串放入数组buf中,方便进行排序 */
while(*word_str != '\0')
{
buf[i++] = *word_str;
word_str++;
}
/* 存储字符的数目 */
max = i - 1;
/* 将buf中的字符串逆序 */
for(i = 0; i < max / 2 + 1; i++)
{
tmp = buf[i];
buf[i] = buf[max - i];
buf[max - i] = tmp;
}
//printf("%s\n", buf);
/* 将逆序的字符串中的单词分别在逆序 */
for(i = 0; i < max + 2; i++)
{
if(buf[i] == '\0')
{
/* 对最后一个单词进行排序 */
max2 = i - 1;
for(j = min2; j - min2 < (max2 - min2) / 2 + 1; j++)
{
tmp = buf[j];
buf[j] = buf[max2 - j + min2];
buf[max2 - j + min2] = tmp;
}
break;
}
else if(buf[i] == 32)/* 对前面以空格结尾的各个单词进行排序 */
{
max2 = i - 1;
for(j = min2; j - min2 < (max2 - min2) / 2 + 1; j++)
{
tmp = buf[j];
buf[j] = buf[max2 - j + min2];
buf[max2 - j + min2] = tmp;
}
min2 = i + 1;
}
}
return buf;/* 返回逆序的单词 */
}
/* 测试程序 */
int main(int argc, const char *argv[])
{
char *str = "this is a test, thank you for your reading!";
char *result;
result = convertwordsort(str);
printf("%s\n", result);
return 0;
}
由于本人水平有限,如有疑问,请联系我!qq:278932578 冯克