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

2023-10-07 13:07:22 浏览数 (1)

【C语言典例】:倒置字符串 链接: https://www.nowcoder.com/questionTerminal/b0ae3d72444a40e2bb14af7d4cb856ba 来源:牛客网

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

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

示例1

输入

代码语言:javascript复制
I like beijing.

输出

代码语言:javascript复制
beijing. like I

思路分析

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

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

如图所示

注意事项

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

gets_s()的使用

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

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

代码语言:javascript复制
void reseve(char* str, int left, int right)
{
    while (left < right)
    {
        char ch = str[left];
        str[left] = str[right];//交换字符串
        str[right] = ch;
        left  ;
        right--;
    }
}

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

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

代码语言:javascript复制
#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;
}

0 人点赞