【Leetcode】:Reverse-Words-in-a-String

Address : https://oj.leetcode.com/problems/reverse-words-in-a-string/

问题描述:给一个string类型的字符串,让你将单词按照逆序输出。

分析:这道题题意十分简单,唯一容易出错的地方就是输入数据的类型。在写代码之前首先设计测试用例是一个比较良好的习惯,那么可以想想有哪些特殊的输入情况,然后在写代码的时候加以判断。

s = “the sky is blue”

s = "   the   sky is blue   "

s = ""

s = " "

s = "1"

算法设计:

1.首先过滤到前缀空格,以及考虑s为空的情况。要养成判断参数的习惯,才能让软件鲁棒性更强。

2.然后用C语言里面的字符串截取函数按照空格将s截取成为一个个单词。

3.将单词放到vector容器里面,然后从后往前拼接成新的字符串,完成逆序。

PS:代码写的不是很简洁,甚至有点繁琐,值得注意的是strtok函数。

AC代码:

class Solution {
public:
    void reverseWords(string &s) {

	int i=0;
	while( i<s.length() && s.at(i) == ' ' )
	{
		i++;
	}
	if( i==s.length() )
	{
		s = "";
		return;
	}

	vector<string> vec;
   	char *ptr;
	char *q = new char[s.length()+2];
	strcpy(q, s.c_str());
	ptr = strtok(q," ");
	while(ptr!=NULL)
	{
		vec.push_back(ptr);
		ptr = strtok(NULL," ");
	}
	//string str;
	s.clear();
	for(i=vec.size()-1;i>=1;i--)
	{
		s += vec[i];
		s += " ";
	}
	s += vec[0];
    }
};

像这种逆序的问题有几种思维方向:0.重新组织数据结构;1.递归;2.用栈;


下面稍微提一下strtok这个截取函数,在此不去探究这个API的实现机制,仅仅举一个应用例子:

/* strtok example */
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

int main ()
{
  char str[] ="-   This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  <strong>pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }</strong>
  system("pause") ;
  return 0;
}

结果:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值