倒置字符串(C语言)

简介: 倒置字符串(C语言)

题目描述

将一句话的单词进行倒置,标点不倒置。比如 “I like beijing.”,经过处理后变为:“beijing. like I”。字符串长度不超过100。

输入描述

输入一个仅包含小写字母、空格、‘.’ 的字符串,长度不超过100。‘.’ 只出现在最后一个单词的末尾。

输出描述

依次输出倒置之后的字符串,以空格分割。

示例

输入

I like beijing.

输出

beijing. like I

1、解题思想

I like beijing.

对于这个字符串单词的逆置可以有两种思路:

  1. 先逆序整个字符串
.gnijieb ekil I
  1. 再逆序每个单词
beijing. like I

第二种

  1. 先逆序每个单词
I ekil .gnijieb
  1. 再逆序整个字符串
beijing. like I

2、具体实现

无论按照哪个思路来进行解题我们都需要进行多次字符串的逆序,所以我们可以写一个函数来完成这一功能:

void reverse(char* left, char* right)
{
  while (left < right)
  {
    char tmp = *left;
    *left = *right;
    *right = tmp;
    left++;
    right--;
  }
}

完成逆序函数后就可以完成主函数的书写了

int main()
{
  char arr[101] ;
  gets(arr);//gets可以读取中间有空格的字符串
  int len = strlen(arr);
  reverse(arr, arr + len - 1);//将字符串整体逆序
  char* start = arr;
  char* cur = arr;
  while (*cur)//cur指针到'\0'退出循环
  {
    //先找到一个单词的后一位
    while (*cur != ' '&&*cur!='\0')
    {
      cur++;
    }
    reverse(start, cur - 1);//将每个单词进行逆序
    start = cur + 1;//让头指针指向下一个单词的第一个
    if (*cur == ' ')//当到了整个字符串的最后一位
    //cur指向'\0'后不再后移,否则循环判断条件就会失效
    {
      cur++;
    }
  }
  printf("%s", arr);
  return 0;
}

3、整体代码及运行测试

#include <stdio.h>
#include <string.h>
void reverse(char* left, char* right)
{
  while (left < right)
  {
    char tmp = *left;
    *left = *right;
    *right = tmp;
    left++;
    right--;
  }
}
int main()
{
  char arr[101] ;
  gets(arr);
  int len = strlen(arr);
  reverse(arr, arr + len - 1);
  char* start = arr;
  char* cur = arr;
  while (*cur)
  {
    while (*cur != ' '&&*cur!='\0')
    {
      cur++;
    }
    reverse(start, cur - 1);
    start = cur + 1;
    if (*cur == ' ')
    {
      cur++;
    }
  }
  printf("%s", arr);
  return 0;
}

做题小技巧

1、scanf函数输入时遇到空格或换行就会停止,可以使用gets进行输入

2、使用指针移动时要注意每个时刻指针指向的位置避免发生错误

目录
相关文章
|
1天前
|
存储 编译器 C语言
【C语言】字符与字符串---从入门到入土级详解
【C语言】字符与字符串---从入门到入土级详解
19 4
【C语言】字符与字符串---从入门到入土级详解
|
1天前
|
编译器 C语言
【C语言】strlen()函数(字符串长度计算函数)
【C语言】strlen()函数(字符串长度计算函数)
24 0
|
1天前
|
安全 程序员 C语言
探索C语言库函数:字符串拷贝函数strcpy
探索C语言库函数:字符串拷贝函数strcpy
21 0
|
1天前
|
存储 C语言
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现2
【我爱C语言】详解字符函数isdigit和字符串转换函数(atoi和snprintf实现互相转换字符串)&&三种strlen模拟实现
|
1天前
|
C语言
每天一道C语言编程(4):字符串的逆序输出
每天一道C语言编程(4):字符串的逆序输出
5 0
|
1天前
|
算法 C语言 人工智能
|
1天前
|
C语言
C语言中 字符串和数字的相互转换
C语言中 字符串和数字的相互转换
13 1
|
1天前
|
C语言 C++
C语言利用ASCII码表统计字符串每个字符出现的次数
C语言利用ASCII码表统计字符串每个字符出现的次数
18 0
|
1天前
|
存储 C语言
C语言中字符串的引用与数组元素操作
C语言中字符串的引用与数组元素操作
23 0
|
1天前
|
安全 C语言
指针与字符串:C语言中的深入探索
指针与字符串:C语言中的深入探索
17 0

热门文章

最新文章