700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 将字符串“I am a student.”逆序输出为“student. a am I”

将字符串“I am a student.”逆序输出为“student. a am I”

时间:2019-11-06 16:49:35

相关推荐

将字符串“I am a student.”逆序输出为“student. a am I”

给到一串字符“I am a student.”,将其输出为“student. a am I”。

整体思路为先将整个字符串逆序为

‘’.tneduts a ma I"

然后再将每个单词进行逆序转换为

“student. a am I”

那么我们只需先写出将整个字符串逆序的函数就已经将问题解决了大半

void reserve_string(char* start, char* end){while (start < end){char temp = *start;*start = *end;*end = temp;start++;end--;}}

此处代码形参是取到目标字符串的首地址和为地址,然后将两个地址处的字符逐个进行交换。

接下来我们再进行处理单个单词,只需要用上面的代码将每个单词进行逆序就可以,但是要注意空格处,代码如下:

void reserve_all(char* str){char *cur = str;int len = strlen(str);reserve_string(str, str + len - 1);while (*cur){char *start = cur;while ((*cur) != ' ' && (*cur) != '\0'){cur++;}reserve_string(start, cur - 1);while ((*cur) == ' '){cur++;}}}

此处代码用指针cur作为当前地址,初始化取字符串首地址str,在进行整体逆序的时候的尾地址为str+len+1(首地址加往后长度的地址减一)。

在进行单个单词逆序的时候在在空格前和终止符前停止地址前移,然后以此进行单个单词调换。

并且需要注意在单个单词调换时的尾地址cur需要-1,因为在上面的while循环中在检测出空格或终止字符后cur还会+1.

接下来只需要执行就可以得到逆序结果了:

int main(){char string[] = "l am a student.";reserve_all(string);printf("%s\n", string);system("pause");return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。