逆置字符串

简介: 逆置字符串

逆置字符串


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


目录
相关文章
|
编译器 C++
C++下标运算符详解
使用第一种声明方式,[ ]不仅可以访问元素,还可以修改元素。使用第二种声明方式,[ ]只能访问而不能修改元素。在实际开发中,我们应该同时提供以上两种形式,这样做是为了适应 const 对象,因为通过 const 对象只能调用 const 成员函数,如果不提供第二种形式,那么将无法访问 const 对象的任何元素。下面我们通过一个具体的例子来演示如何重载[ ]。
|
2月前
|
人工智能
数组逆序输出
数组逆序输出。
38 12
|
3月前
|
C语言 Python 容器
将一个数组逆序输出。
将一个数组逆序输出。
36 4
|
3月前
获取字符下标
获取字符下标
31 0
|
7月前
L1-050 倒数第N个字符串
L1-050 倒数第N个字符串
30 0
|
7月前
|
Python
ptthon字符串的逆序输出
字符串的逆序输出
44 0
字符串的全排列
字符串的全排列
84 0
逆序字符串 和 字符串的逆序输出 的区别~
逆序字符串 和 字符串的逆序输出 的区别~
116 0
|
算法 前端开发 API
字符串看到 ”回文“ 尝试双指针
字符串看到 ”回文“ 尝试双指针
66 0