码迷,mamicode.com
首页 > 其他好文 > 详细

华为机试—给定字符串中找出单词

时间:2015-04-27 13:18:29      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:华为机试   给定字符串中找出单词   长度排序单词   

题目:

在给定字符串中找出单词(“单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。


要求实现函数:
void my_word(charinput[], char output[])

【输入】  char input[], 输入的字符串
【输出】  char output[],输出的字符串
【返回】无

示例:
输入:charinput[]="some local buses, some1234123drivers" ,
输出:charoutput[]="drivers local buses some"
输入:charinput[]="%A^123 t 3453i*()" ,
输出:charoutput[]=""


#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

bool myfunction (const string &str1,const string &str2){	
	return(str2.length()< str1.length());
}

void my_word(char input[],char output[]){
	
	vector<string> str;
	char*cur = input;
	char*p = input;
	int len;
	bool flag =false;
	//去除杂质,取单词
	while(*p !='\0'){
		if((*p >='a'&&*p <='z')||(*p >='A'&&*p <='Z'))
			p++;
		else{
			len = p-cur;
			if(len >1){
				string tmp(cur,len);

				for(int i=0;i<str.size();i++)
					if(tmp == str[i])
						flag =true;
				if(flag !=true)
					str.push_back(tmp);
			}
			cur = p+1;
			p++;
			flag =false;
		}
	}

	len = p-cur;
	if(len >1){
		string tmp(cur,len);

		for(int i=0;i<str.size();i++)
			if(tmp == str[i])
				flag =true;
		if(flag !=true)
			str.push_back(tmp);
	}

	//sort
	sort(str.begin(),str.end(),myfunction);
	//拼接字符串
	*output='\0';
	int i;
	for(i=0;i<str.size()-1;i++){
		strcpy(output+strlen(output),(str[i]+" ").c_str());
		
	}
	strcpy(output+strlen(output),(str[i]).c_str());
	cout<<output<<endl;
}

int main(){

	char input[]="some ninja local buses, somes1234123drivers";
	char output[500];
	my_word(input, output);

	return 0;
}

技术分享



华为机试—给定字符串中找出单词

标签:华为机试   给定字符串中找出单词   长度排序单词   

原文地址:http://blog.csdn.net/wtyvhreal/article/details/45308423

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!