挑战面试编程:单词翻转、高斯公式、魔方矩阵、黑白球、3n+1

这篇博客介绍了五个编程面试题,包括如何翻转句子中的单词、解决等差数列求和的高斯公式、构建魔方矩阵、分析黑白球游戏的策略以及解决3n+1问题。每个题目都提供了简单的代码实现,并探讨了可能的优化和解题思路。
摘要由CSDN通过智能技术生成

      挑战面试编程:单词翻转、高斯公式、魔方矩阵、黑白球、3n+1

题一:

    把一字符串如"I love you."变为"you. love I"。


分析:

    这并不是一简单的字符串reverse的操作,在reverse的过程中要保持单词本身的字母顺序。这就要求我们找到单词间的间隔,显然是空格,或者是标点。单词也并非只是字母,也有可能是数字。

    于是我们总结:两个标点或空格之间的内容,我们把它当做一单词。细节还得看代码……


代码:

这是一段简易的代码:

<span style="font-size:18px;">
#include<iostream>
using namespace std;
char* reverseWords(const char *s,char *t)
{
	assert(s&&t);
	int slen=strlen(s);		
	int start,end,begin=0; //start指向一个单词的起始位置的前一个,end表示结束位置的后一位 
	start=end=slen-1;
	while(start>=0 && !(isalpha(s[start])))     //从右向左,找第一个字母出现的位置 
	start--;
	while(start>=0)
	{
		while(start>=0 && isalnum(s[start]))
		start--;
		//此时start的位置要么是空格,要么就是标点
		memcpy(t+begin,s+start+1,end-start);
		//以下的调整需画图理解 
		begin+=end-start;
		end=start;
		start--; 
	}
	*(t+begin)='\0';
	return t;
}
int main()
{
	char *s="I love you.";
	cout<<"原字符串"<<endl;
	cout<<s<<endl;
	//构建一新的字符串存储变换后的
	char *t=new char[strlen(s)+1];    //多一个位置存放'\0' 
	reverseWords(s,t);
	cout<<"翻转……"<<endl;
	cout<<t<<endl; 
	delete []t;
	return 0;
}</span></span>


理解变量start 和end:


运行实例:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值