本题有很多解法,但是最近刚好学习到滑动串口相关的问题,特此用滑动窗口的相关解法,使用从字符串往前滑动的 滑动窗口,默认不带空格字符串的前后index 均为len-1; 然后向前滑动,当left 遇到空格时停止,然后打印 left+1到 right 之间的字符。一直到 最后left=0, 仍然要打印最后一个不带空格字符串(如果原始字符串中不带空格, 那么这个打印就是唯一的了,也很重要)
#include <stdio.h> #include <math.h> #include <ctype.h>
int main(void) { char str_in[1001] = {0}; while (fgets(str_in, 1001, stdin)) { int len = strlen(str_in) -1; // 实际字符串中不包括默认'\0'的个数 int left = len-1; int right = len-1;
while(left > 0) {
while(str_in[left] != ' ' && left > 0) {
left--; // 在没有遇到空格时,left继续往左推进
}
if(left == 0) {
break; // 当left为0 时,表面此时已经到了原始字符串开头
}
for(int i = left+1; i<= right; i++) { // 因为此时left是空格所在位置的下标,所以i = left+1;
printf("%c", str_in[i]);
}
printf(" ");
right = left -1; // right 的下标移到下一个需要打印的子字符串末尾处,
left--; // left 同样也移到下一个需要打印的子字符串末尾处;
}
for(int i = left; i<= right; i++) { // 打印从0 开始的字符串
printf("%c", str_in[i]);
}
printf("\n");
}
return 0;
}