Text Reverse/文字反向

 一:杭电原题摘录http://acm.hdu.edu.cn/game/entry/problem/show.php?chapterid=1&sectionid=2&problemid=5

杭电2.1.1

二.题目分析 

首先他不是一个简单的字符串逆序,那样的话只用库函数就可以轻易解决,岂不便宜大家了.因为每一次的输入是由多个单词组成的字符串,中间由空格组成.这样逆序函数就不行了.

所以我们需要记录他的空格数,根据空格数m,将该字符分为m+1个单词,分别对m+1个单词进行reverse就可以了.但必须加上严谨逻辑的判断.

三.我的收获

1.首先肯定是getchar()的无穷魅力了.用来接收一个"\n" ,使输入输出标准化.

没有它的情况是这样的,建议亲手实践.(可以清楚看到有换行)

2.然后是库函数reverse(颠倒,相反),我叫它字符截取反转函数.

具体用法:比如.str="012345678",reverse(str+2,str+7)之后为23456,所以我理解为前闭后开

四.AC代码

#include <iostream> 
using namespace std; 
#include <cstdio>
#include <string>
#include <string.h>
#include <algorithm>

void change(char str1[100],int n)
{
	int ji[100];	
	int i,i1,i2;
	int m=i=i1=i2=0;
	ji[0]=n;	
    //记录字符串a中各空格的位置 
    for(i=0;i<n;i++)
	{	
	if(str1[i]==' '){ 	
	ji[m]=i;
	m+=1;//空格数
	}	
	}
	//截取加反转函数	
	for(i=0;i<=m;i++)
	{
	if(i==0&&i==m) reverse(str1,str1+ji[0]);//m=首又=尾,也就是字符串只有一个单词
    //接下来,单词数大于一.
	if(i==0&&i!=m) reverse(str1,str1+ji[0]);//首
	if(i==m&&i!=0) reverse(str1+ji[m-1]+1,str1+n);//尾
	if(i>0&&i<m)  reverse(str1+ji[i-1]+1,str1+ji[i]);//中
	} 
	//输出 
	cout<<str1<<endl;

}

int main(int argc, char** argv)
{ 	
    int n;
    int i;
    cin>>n; 
    getchar();//用来接收一个"\n" 
	for(int j=0;j<n;j++)	
	{		     
	    char str[100];		
        gets(str);	
		i=strlen(str);		
		change(str,i);							
	}
    return 0; 
}

附:由于这是专栏的第一篇文章,特做出如下声明:以后的每一篇文章都会采用此写法和杭电的ACM题目.每天至少两篇免费注册账号http://acm.hdu.edu.cn/

ACM题型:

1.DIRECT(水题)

2.Computational Geometry(计算几何)

3.Number Theory(数论)

4.Search Techniques(搜索技术)

5.Dynamic Programming(动态规划)

6.Graph Theory(图论)

7.Data Structure(数据结构)

8.Other(其它)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值