【C语言典例】:倒置字符串

【C语言典例】:倒置字符串


链接: https://www.nowcoder.com/questionTerminal/b0ae3d72444a40e2bb14af7d4cb856ba
来源:牛客网

将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I

输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100
输出描述:
依次输出倒置之后的字符串,以空格分割

示例1

输入

I like beijing.

输出

beijing. like I

思路分析

通过观察得知,先对整个字符串逆序,后对字符串中每一个单词逆序便可解决此问题。

  1. 对整个字符串进行逆序
  2. 对字符串中的每一个单词进行逆序

如图所示

在这里插入图片描述

注意事项

不能使用scanf,因为scanf一遇到空格就中止,可以使用gets();或者 gets_s();

gets_s()的使用

首先将字符串逆序独立成一个逆序字符的函数

*str为字符串首地址,right为字符串中最后一个字母的下标,

void reseve(char* str, int left, int right)
{
    
    
    while (left < right)
    {
    
    
        char ch = str[left];
        str[left] = str[right];//交换字符串
        str[right] = ch;
        left++;
        right--;
    }
}

其次对字符串中的每一个单词进行逆序

     int temp = 0;//数组首元素的下标
    for (int i = 0; i < len + 1; i++).//遍历字符串
    {
    
    
        if (arr[i] == ' ' || arr[i] == 0)//遇到空格或者\0就需要单词逆序
        {
    
    
            reseve(arr, temp, i - 1);//调用逆序数组,  i为空格或者\0的下标 i-1为单词最后一个字母的下标
            temp = i + 1;//下一个单词的第一个字母的下标
        }
    }

全部代码

#include<string.h>
#include<stdio.h>

void reseve(char* str, int left, int right)
{
     
     
   while (left < right)
   {
     
     
       char ch = str[left];
       str[left] = str[right];
       str[right] = ch;
       left++;
       right--;
   }
}

int main()
{
     
     
   char arr[100] = {
     
      0 };
   gets_s(arr,100);
   int len = strlen(arr);
   reseve(arr, 0, len - 1);

   
   int temp = 0;
   for (int i = 0; i < len + 1; i++)
   {
     
     
       if (arr[i] == ' ' || arr[i] == 0)
       {
     
     
           reseve(arr, temp, i - 1);
           temp = i + 1;
       }
   }

   printf("%s", arr);
   return 0;
}
结束语

​ 上联:世界那么大,我想去看看;下联:钱包那么小,谁都走不了;横批:好好上班。

猜你喜欢

转载自blog.csdn.net/qq_60308100/article/details/123173945