microsoft面试题之十
microsoft面试题之10
翻转句子中单词的顺序。但单词内字符的顺序不变。
例如输入“I am a student." 输出”student. a am I"。
算法:先对整个句子进行翻转,再对每个单词时行一次翻转
#include <stdio.h> #include <string.h> #include <assert.h> char* wordLength(char *stringPtr, int *len, int *flag) { assert(stringPtr); assert(len); assert(flag); *len = 0; while(' ' != *stringPtr && '\0' != *stringPtr) { (*len)++; stringPtr++; } if('\0' == *stringPtr) { *flag = 0; } return stringPtr; } void reverse(char *stringPtr, int len) { assert(stringPtr); int iter = 0; char temp; int length = len - 1; while(iter < length) { temp = *(stringPtr + iter); *(stringPtr + iter) = *(stringPtr + length); *(stringPtr + length) = temp; iter++; length--; } } void resultReverse(char *stringPtr, int len) { int flag = 1; int lengthWord; reverse(stringPtr, len); while(flag) { stringPtr = wordLength(stringPtr, &lengthWord, &flag); reverse(stringPtr - lengthWord, lengthWord); while(' ' == *stringPtr) { stringPtr++; } } } int main(void) { char arr[] = "I am a student."; int len = strlen(arr); resultReverse(arr, len); printf("%s\n", arr); return 0; }