//第一步:将整个字符串反转 //第二步:用循环,以空格为分界点,每次反转一个单词 //先定义反转(不带空格的)字符串函数 void reverse(char* s, int begin, int end){ char tmp; while(begin < end){ tmp = s[begin]; s[begin] = s[end]; s[end] = tmp; begin++; end--; } } //反转(带空格的)长字符串函数 char* trans(char* s, int n ) { reverse(s, 0, n-1); //第一步,将整个字符串反转 int i = 0, j = 0; while(i < n){ j = i; //不要直接用i来操作,而是用j接收i来操作, while(j < n && s[j] != ' ') { //止于空格,用于将单个单词的大小写对换 if(s[j] >= 'A' && s[j] <= 'Z') s[j] += 32; //大写换小写 else if(s[j] >= 'a' && s[j] <= 'z') s[j] -= 32; //小写换大写 ++j; //每转换一个字母之后j后移一位 } reverse(s, i, j-1); //当j指向空格时退出循环,开始反转单词 i = j + 1; //反转完之后,i应该指向下一个单词的第一个字母,也就是空格之后那个字母 } return s; }