题目描述:输入一串字符串: hello world
输出: world hello
方法1:指针做法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//解决思路:第一步:把字符串由hello world 变成dlrow olleh
// 第二步:dlrow olleh变成 world hello
void spinWord(char *start, char *end) {//定义的指针 start end 分别指向字符串的地址? *start *end取值才是指向字符串的值
char tmp;//因为要交换,所以定义一个中间变量
while (start < end) {
tmp = *start;//
*start = *end;
*end = tmp;
start++;//循环进行下去的条件
end--;
}
}
int main() {
char str[1000];
char *front, *later;//定义俩指针分别指向一个单词的首尾字母
while (gets(str) != NULL)
{
spinWord(str, str + strlen(str) - 1);//实现hello world 到dlrow olleh的转变
later = front = str;
while (*front!='\0')//结束条件,front走到最后一个字母的后面时,如果比较熟,*front!=‘\0’可以写成*front即可
{
while (*front == ' ')
{
front++;
}//走完while循环,说明此时,*front已经指向单词第一个字母了,即dlrow的d
later = front;//让back也指向单词第一个字母
while (*front != ' '&&*front != '\0')//如果比较熟,*front!=‘\0’可以写成*front即可
{
front++;
}//走到这说明front已经走完第一个单词的所有字母,即从dlrow的d走到w后的那个空格了
spinWord(later, front - 1);//走到这,可以发现第一个单词可以打完,没问题,此时发现可以在
//外面加个while循环,因为后面的单词和前面情况一样!!!!!!!
}
puts(str);
}
return 0;
}
2.数组做法,怎么做?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//void wordSpin() {
// int i;
// int tmp;
// int len = strlen(str);
// for (i = 0; i < len / 2; i++) {
// tmp = str[i];
// str[i] = str[len - i - 1];
// str[len - i - 1] = tmp;
// }
//}
int main() {
char str[100];
while (gets(str) != NULL) {//hello world
int i;
int tmp;
int len = strlen(str);
for (i = 0; i <len/2;i++) {
tmp = str[i];
str[i] = str[len-i-1];
str[len-i-1] = tmp;
}
//puts(str);// dlrow olleh
int j=0;
while (str[j] == ' ') {
j++;
}
}
}