题解 | #单词倒排# 逻辑>>步骤
单词倒排
https://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836
#include <stdio.h> #include <string.h> void back(char* arr, int sz) //逆序函数 { int left = 0, right = sz - 1; while (left < right) { char tmp; tmp = arr[left]; arr[left] = arr[right]; arr[right] = tmp; left++; right--; } } int main() { char rec[10000]; scanf("%[^'\n']", rec); int sz = strlen(rec); for (int i = 0;i < sz;i++) //先把其他间隔符替换成空格 { if (rec[i] < 'A' || rec[i]>'Z' ) { if (rec[i] < 'a' || rec[i]>'z') { rec[i] = ' '; } } } //整体倒序 back(rec, strlen(rec)); //单词倒序 int pos = 0;int len = 0;int head = 0; while (pos < sz) { if (rec[pos] != ' ') len++; else if(rec[pos]==' '||rec[pos+1]=='\0') { back(&rec[head], len); len = 0; head = pos + 1; } pos++; } if(pos==sz) //最后一组会由于pos==sz因而进不去循环,所以要单独拿出来 { back(&rec[head],len); } printf("%s", rec); return 0; }