字符串按单词(term)反转(C代码)

来源:互联网 发布:乌鲁木齐软件开发公司 编辑:程序博客网 时间:2024/06/09 20:56

有一个英文句子,每个单词(term)之间用空格分隔,例如:I like English very much 要求反转后变为 much very English like I

上面的问题可以利用C语言中字符串已'\0'结尾,且'\0'是字符串打印的截止符,代码如下:(这只是打印出反转的字符串,而不是针对原串反转)

#include <stdio.h>#include <string.h>void reverse(char *s){int len = strlen(s);int i;for(int i = len; i >=0 ; i --){if(s[i] == ' '){s[i] = '\0';printf("%s ", s + i + 1);}}printf("%s\n", s);}

如果只是打印还可以使用栈,从字符串的末尾进行遍历,遇到空格后将栈中的元素全部pop,直到字符串从尾到头遍历完成。


以上都是打印按term反转的字符串,如果是改变原来的字符串呢?

可以这样考虑,先将字符串整体反转,然后从头遍历,当遇到空格时将这个term再次进行反转,到末尾时整个字符串反转完毕。

/*************************************************************************        > File Name: reverse_term.c        > Author: desionwang        > Mail: wdxin1322@qq.com         > Created Time: Thu 14 Nov 2013 09:55:17 AM CST ************************************************************************/#include<stdio.h>#include<string.h>int reverse(char *str, int l, int h){        if(str == NULL){                return -1;        }        while(l <= h){                char tem = str[l];                str[l] = str[h];                str[h] = tem;                l++;                h--;        }        return 0;}int reverse_term(char *str, int l, int h){        reverse(str, l, h);        int s = 0, e = 0;        char *p = str;        while(*p != '\0'){                if(*p == ' '){                        reverse(str, s, e-1);                        s = e + 1;                }                p++;                e++;        }}int main(int argc, char *argv[]){        char *str = argv[1];        int len = strlen(str);        reverse_term(str, 0, len-1);        printf("%s\n", str);}

原创粉丝点击