前言
逆序字符串和字符串的逆序输出,可能经常会有人混淆,所以今天带大家一起来看一看吧!
一、字符串的逆序,字符串的逆序输出是什么?
逆序字符串:针对一个输入的字符串数组,通过逆序,将其数组内容进行翻转逆序。
字符串的逆序输出:对于一个字符串,只需要数组创建,然后求出字符串的长度,从字符串数组最后一个元素依次输出,直到第一个元素。即可完成字符串的逆序输出。
二、实例讲解
1.字符串的逆序输出
代码如下(示例):
#include<stdio.h> #include<string.h> int main() { char arr[]="1234567"; int i=0; int sz=strlen(arr); for(i=sz-1;i>=0;i--) { printf("%c",arr[i]); } return 0; }
可以看出,在输入字符串以后,逆向打印出字符串数组的每一个元素,只需要要从数组的最后一个下标,即数组元素的个数减1,开始算起,到数组下标为0.输出即可!
2.逆序字符串
#include<stdio.h> #include<string.h> void reverse(char* left, char *right) { while (left < right) { char temp = *left; *left = *right; *right = temp; left++; right--; } } int main() { char arr[] = "1234567"; int sz = strlen(arr); int i = 0; reverse(arr, arr+sz-1); for (i = 0; i < sz; i++) { printf("%c", arr[i]); } return 0; }
通过reverse函数,将字符串内部逆置。
while (left < right)
{
char temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
通过传址,将数组的首地址和元素的最后一个地址传到reverse函数中,通过解引用,交换其两端的值,来达到逆置字符串.
3.综合实例
首先,看到题目后,我们应该分三步!!
1.将整个字符串进行倒置
.gnijieb ekil I
2.将每部分字符串倒置
beijing. like I
具体代码如下
void reverse(char* left, char* right) { while (left < right) { char temp = *left; *left = *right; *right = temp; left++; right--; } } int main() { char arr[100] = { 0 }; //输入字符串 gets(arr); int sz = strlen(arr); //将字符串进行整体的倒置 reverse(arr, arr + sz - 1); //将部分字符串进行倒置 char* start = arr; while (*start) { char* end = start; while (*end != ' ' && *end!='\0') { end++; } reverse(start, end - 1); if (*end == ' ') { start = end + 1; } else { start = end; } } printf("%s", arr); return 0; }
重难点:
(sz为字符串元素个数)
第二步为,对部分字符串进行倒置。
(第一部分为例)
while (*end != ' ' && *end!='\0')
{
end++;
}
不难看出,只要end一直增加,直到不为空格或者\0,就可以到达第一部分字符串末尾地址。
(以第一部分为例)
end起初和start地址相同,但是要判断是否为空格或者\0,需要先自增,再看是否满足while条件,当结束条件时,end此时指向空格的地址,所以需要减1,来确定第一部分的末尾地址
之后再利用reverse函数进行倒置。
当排序后,如果end此时指向空格的地址,则需要start=end+1,到达第二个部分,在进行倒置。
如果不为空格,则start=end;
总结
分清楚倒置字符串,和字符串的倒置输出!
其次在最后一个题目中,需要注意字符串的首尾地址!