有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关

xiaoxiao2021-02-28  96

有一个字符数组的内容为:”student a am i”,请你将数组的内容改为”i am a student”.

要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。

思路:这个字符串并不是把原来数组倒序过来就可以,因为每个单词也要逆序,因此可以先把整个字符串逆序,然后再分别逆序每个单词,这样就可以了。

#include<stdio.h> #include<assert.h> int my_strlen(const char *str) { assert(str); int len = 0; while (*str++) { len++; } return len; } void reverse(char *start,char *end) { assert(start); assert(end); while (start < end) { char *tmp = *start; *start = *end; *end = tmp; start++; end--; } } void str_reverse(char *arr) { int len = my_strlen(arr); reverse(arr, arr + len - 1); while (*arr) { char *tmp = arr; while ((*arr != ' ') && (*arr != '\0')) { arr++; } reverse(tmp, arr-1); if (*arr == ' ') { arr++; } } } int main() { char arr[] = "student a am i"; str_reverse(arr); printf("%s", arr); return 0; }
转载请注明原文地址: https://www.6miu.com/read-74019.html

最新回复(0)