ODOA(1) 翻转句子中单词的顺序(C语言实现)

9 篇文章 0 订阅
2 篇文章 0 订阅

动动手才发现自己现在的在C/C++方向的几个问题:

  • 对自己的入门语言C语言变得非常陌生
  • 编程的思维固定在找既有的方法,主要原因是python写多了,基本上所有常见的问题,都有现成的方法,让自己变得懒惰了
  • 对C++的实际应用不熟练,虽然一直在看C++相关的东西,但是实战经验还是太少,在后面会更多的使用C++来实现一些算法
  • 由于python 的链表,字典设计的非常方便,所以在数据结构方面也缺乏训练和提高

今天先做一个简单的问题。


问题描述:

翻转句子中单词的顺序

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理

例如:输入“I am a student.”,则输出“student.a am I”。


/*
  Name: reverse.h
  Author: suzhou
  Date:   2014.02.12
  Num.    1
 */


#include"stdio.h"
#include"string.h"

void reverseStr(char* str, int i, int j);
void reverseWords(char* str);

/*
  File: wordsreverse.c
  Author: suzhou
  Date:   2014.02.12
  Num.    1
  Question:
  翻转句子中单词的顺序。
  题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
  句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
  例如输入“I am a student.”,则输出“student.a am I”。
 */

#include"reverse.h"

/* 字符串反转
 */
void reverseStr(char* str, int i, int j)
{
	for (; i < j; i++, j--)
	{
		char tmp;
		tmp = str[i];
		str[i] = str[j];
		str[j] = tmp;
	}
	return ;
}

/* 句子反转
 */
void reverseWords(char* str)
{
	int i = 0;
	char* subStrStart;
	char* subStrEnd;
	char* currentPos;

	currentPos = str;
	while(*currentPos!='\0')
	{
		subStrStart = currentPos;
		while(*currentPos!=' ' && *currentPos!='\0')
			currentPos++;
		subStrEnd = currentPos - 1;
		reverseStr(str, (int)(subStrStart - str), (int)(subStrEnd - str));
		currentPos++;	
	}
	return;
}


int main()
{
	char str[20] = "I am a student.";
	reverseStr(str, 0, strlen(str)-1 );
	reverseWords(str);
	printf("%s\n", str);
	return 0;
}


不要认为实现这类基础算法是“重复造车轮”,能说这句话的前提条件是自己有造车轮的能力。好好打牢基础才是现阶段的关键任务。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值