逆序字符串 和 字符串的逆序输出 的区别~

简介: 逆序字符串 和 字符串的逆序输出 的区别~

前言

逆序字符串和字符串的逆序输出,可能经常会有人混淆,所以今天带大家一起来看一看吧!


一、字符串的逆序,字符串的逆序输出是什么?

逆序字符串:针对一个输入的字符串数组,通过逆序,将其数组内容进行翻转逆序。


字符串的逆序输出:对于一个字符串,只需要数组创建,然后求出字符串的长度,从字符串数组最后一个元素依次输出,直到第一个元素。即可完成字符串的逆序输出。


二、实例讲解

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;


总结

分清楚倒置字符串,和字符串的倒置输出!


其次在最后一个题目中,需要注意字符串的首尾地址!


目录
相关文章
|
索引
【LeetCode】917. 仅仅反转字母、387. 字符串中的第一个唯一字符
目录 917. 仅仅反转字母 387. 字符串中的第一个唯一字符
48 0
|
7月前
|
C++
c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)
c++:string相关的oj题(把字符串转换成整数、344.反转字符串、387. 字符串中的第一个唯一字符、917. 仅仅反转字母)
80 0
|
7月前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
7月前
|
机器学习/深度学习 Java
java字符串练习题3、字符串中字符是否相同判断
java字符串练习题3、字符串中字符是否相同判断
62 0
|
7月前
|
Python
ptthon字符串的逆序输出
字符串的逆序输出
41 0
字符串转数组、数组转字符串、给第一个单词色值
字符串转数组、数组转字符串、给第一个单词色值
字符串的全排列
字符串的全排列
80 0
逆置字符串
逆置字符串
64 0
剑指offer 51. 字符串中第一个只出现一次的字符
剑指offer 51. 字符串中第一个只出现一次的字符
67 0
|
C语言 C++
将一个字符串str的内容颠倒(逆序)过来,并输出
将一个字符串str的内容颠倒(逆序)过来,并输出
312 0
将一个字符串str的内容颠倒(逆序)过来,并输出