字符串常量 - 对字符串中的所有单词进行倒排

字符串常量 - 对字符串中的所有单词进行倒排

1. ASCII Table and Description

'0' - 48
'1' - 49

'8' - 56
'9' - 57

'A' - 65
'B' - 66

'Y' - 89
'Z' - 90

'a' - 97
'b' - 98

'y' - 121
'z' - 122

' ' - 32 - Space - 空格
10 - LF (NL line feed, new line) - 换行
13 - CR (carriage return) - 回车

2. 对字符串中的所有单词进行倒排

  1. 每个单词是以 26 个大写或小写英文字母构成。
  2. 非构成单词的字符均视为单词间隔符。
  3. 要求倒排后的单词间隔符以一个空格表示。如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符。
  4. 每个单词最长 20 个字母。

输入描述:
输入一行以空格来分隔的句子。

输出描述:
输出句子的逆序。

EXAMPLE:
输入

I am a student

输出

student a am I
//============================================================================
// Name        : input
// Author      : Yongqiang Cheng
// Version     : Version 1.0.0
// Copyright   : Copyright (c) 2019 Yongqiang Cheng
// Description : Hello World in C++, Ansi-style
//============================================================================

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

char * inference_function(const char *input_string)
{
	int right_idx = 0, left_idx = 0;
	int string_length = 0;
	char *output_string = NULL;
	int out_idx = 0;

	if (NULL == input_string)
	{
		return NULL;
	}

	string_length = strlen(input_string);
	if (0 == string_length)
	{
		return NULL;
	}

	output_string = (char *)malloc((string_length + 1) * sizeof(char));

	right_idx = string_length - 1;
	left_idx = string_length - 1;
	while (left_idx >= 0)
	{
		char chi = input_string[left_idx];

		if (((chi >= 'a') && (chi <= 'z')) || ((chi >= 'A') && (chi <= 'Z')))
		{
			while (left_idx >= 0)
			{
				char chj = input_string[left_idx];
				if (((chj >= 'a') && (chj <= 'z')) || ((chj >= 'A') && (chj <= 'Z')))
				{
					left_idx--;
				}
				else
				{
					break;
				}
			}

			for (int jdx = left_idx + 1; jdx <= right_idx; jdx++)
			{
				output_string[out_idx] = input_string[jdx];
				out_idx++;
			}

			output_string[out_idx] = ' ';
			out_idx++;

			right_idx = left_idx;
		}
		else
		{
			right_idx--;
			left_idx--;
		}
	}

	if (out_idx > 0)
	{
		output_string[out_idx - 1] = '\0';
	}
	else
	{
		output_string[out_idx] = '\0';
	}

	return output_string;
}

int main()
{
	char input_string[5000] = { 0 };
	char *output_string = NULL;

	if (NULL == gets(input_string))
	{
		return 0;
	}

	output_string = inference_function(input_string);

	if (NULL != output_string)
	{
		printf("%s\n", output_string);
		free(output_string);
		output_string = NULL;
	}

	return 0;
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yongqiang Cheng

梦想不是浮躁,而是沉淀和积累。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值