今天,有个朋友看了我的一篇关于将句子中单词次序翻转并输出的文章,说这个程序只做到了输出,没有存储,实用不大。链接在下面!
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 != ' ') { 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 ", buf); /* 将逆序的字符串中的单词分别在逆序 */ for(i = 0; i < max + 2; i++) { if(buf[i] == ' ') { /* 对最后一个单词进行排序 */ 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 ", result); return 0; }
由于本人水平有限,如有疑问,请联系我!qq:278932578 冯克