逆置字符串

简介: 逆置字符串

逆置字符串


6f608101464ee8095716764406db585f_2643f7d4a0a84573aeace895e2f40334.png


1.输入字符串


char ch[]="";
gets(ch);


这里没有使用scanf(),因为当遇到空格时,scanf()就会停止。

而此字符串中存在空格

使用gets()就可以巧妙地避免这一问题


2.逆置


1.逆置整个字符串
reverse(char* left, char* right)
{
  while (left < right)
  {
    char tmp = *left;
    *left = *right;
    *right = tmp;
    left++;
    right--;
  }
}
2.逆置每个单词
    char* start = ch;
  while (*start)
  {
    char* end = start;
    //当*end==''时,前面为假,不进入循环
    //当*end==‘\0'时,前面为真,后面为假,不进入循环
    while (*end != ' ' && *end != '\0')
    {
      end++;
    }
    reverse(start, end - 1);
    //当end指向字符串结尾处的'\0'将不再向后移动
    if (*end != '\0')
    {
      end++;
    }
    start = end;
  }
3.输出


printf("%s\n",ch);


完整代码


#include<stdio.h>
#include<string.h>
#include<assert.h>
void reverse(char* left, char* right)
{
  assert(left);
  assert(right);
  while (left < right)
  {
  char tmp = *left;
  *left = *right;
  *right = tmp;
  left++;
  right--;
  }
}
int main()
{
  char ch[] = " ";
  gets(ch);
  int len = strlen(ch);
  reverse(ch, ch + len - 1);
  char* start = ch;
  while (*start)
  {
  char* end = start;
  //当*end==''时,前面为假,不进入循环
  //当*end==‘\0'时,前面为真,后面为假,不进入循环
  while (*end != ' ' && *end != '\0')
  {
    end++;
  }
  reverse(start, end - 1);
  //当end指向字符串结尾处的'\0'将不再向后移动
  if (*end != '\0')
  {
    end++;
  }
  start = end;
  }
  printf("%s\n", ch);
  return 0;
}

4f4ab7d73ab167be5afa6701cff4e26f_0c5727ff7890405e80f28ae6b7dbcd7f.png


目录
相关文章
|
1月前
|
人工智能
数组逆序输出
数组逆序输出。
31 12
|
2月前
|
C语言 Python 容器
将一个数组逆序输出。
将一个数组逆序输出。
30 4
|
6月前
L1-050 倒数第N个字符串
L1-050 倒数第N个字符串
25 0
|
6月前
|
Python
ptthon字符串的逆序输出
字符串的逆序输出
39 0
字符串的全排列
字符串的全排列
78 0
逆序字符串 和 字符串的逆序输出 的区别~
逆序字符串 和 字符串的逆序输出 的区别~
113 0
|
算法 前端开发 API
字符串看到 ”回文“ 尝试双指针
字符串看到 ”回文“ 尝试双指针
63 0
|
机器学习/深度学习 NoSQL 算法
字符串——344.反转字符串
本专栏按照数组—链表—哈希—字符串—栈与队列—二叉树—回溯—贪心—动态规划—单调栈的顺序刷题,采用代码随想录所给的刷题顺序,一个正确的刷题顺序对算法学习是非常重要的,希望对大家有帮助
字符串——344.反转字符串