华为上机笔试题——字符串转换
来源:互联网 发布:sql server 2008r2卸载 编辑:程序博客网 时间:2024/06/05 00:53
问题描述:
在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),
然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。
输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
要求实现函数:
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 <stdio.h>#include <string.h>#include <assert.h>#include <stdlib.h>#define N 20#define M 100char *word[N];//这儿必须设置为指针数组,才便于后面按长度冒泡排序!!bool iszimu (char s)//用于判断一个字符是否为字符{if((s>='a'&&s<='z')||(s>='A'&&s<='Z'))return true;return false;}bool issame(char s[],int j)//用于判读重复单词{for(int i=0;i<j;i++)if(i!=j &&strcmp(s,word[i])==0)return 1;return 0;}void my_word(char input[], char output[]){assert(input!=NULL);int i=0,j=0,num=0;for(i=0;i<N;i++)//指针数组必须为每个数组元素分配内存(指向字符窜)如果用二维字符数组,则不需要分配内存!!word[i]=(char *)malloc(M*sizeof(char));char *p=input;char temp[2];//用于保存一个字母char *swp;//交换临时变量bool flag=false;//用于断单词bool first=true;//用于复制第一个字母while(*p){if(iszimu(*p)){temp[0]=*p;temp[1]='\0';if(first){strcpy(word[num],temp);//先复制first=false;}elsestrcat(word[num],temp);//再连接if(!iszimu(*(p+1)))flag=true;}if(flag)//遇到第一个非字母字符,则开始存储下一个单词{//puts(word[num]);num++;flag=false;first=true;}p++;}for(i=1;i<num;i++)//对保存的单词组按长度非递增进行冒泡排序for(j=0;j<num-i;j++)if(strlen(word[j])<strlen(word[j+1])){swp=word[j];word[j]=word[j+1];word[j+1]=swp;}if(strlen(word[0])!=1)//输出第一个单词strcpy(output,word[0]);elsestrcpy(output,"");//如果第一个单词长度都为1,则输出空for(i=1;i<num;i++)if(strlen(word[i])!=1 && !issame(word[i],i))//降序输出其余单词{strcat(output," ");strcat(output,word[i]);}}void main(){//char input[100]="some local buses, some1234123drivers";//char input[100]="%A^123 t 3453i*()";char input[100]="some local buses,sdf,rgfg 23 4 fdfd 35fgf io some1234123drivers";//char input[100];char output[100];//gets(input);my_word(input,output);puts(output);}
- 华为上机笔试题——字符串转换
- 字符串处理转换(华为2013校园招聘上机笔试题 )
- 成绩排名——华为上机笔试题
- 华为上机笔试题
- 华为2013校园招聘上机笔试题--字串转换
- 华为上机笔试题(2)
- 2013华为招聘上机--- 字符串处理转换
- 华为2016校园招聘上机笔试题——成绩查询和更新
- 替换字符串——华为笔试时的一道题
- 华为2014笔试编程题——字符串压缩
- 2012华为校园招聘上机笔试题
- 华为2013校园招聘上机笔试题
- 华为公司上机笔试题剖析
- 华为2013校园招聘上机笔试题
- 华为2011上机笔试题3
- 华为2011上机笔试题2
- 华为2011上机笔试题1
- 2013华为笔试上机题 等式变换
- [go语言]环境配置
- gcc命令objdump用法
- 输入两个正整数m和n,求其最大公约数和最小公倍数
- hdu 2120 Ice_cream's world I
- 黑马程序员_java基础day01
- 华为上机笔试题——字符串转换
- OGG-01091 Unable to open file (error 89, Invalid file system control data detected)
- 浅谈Java设计模式之------代理模式
- 运算符的重载
- shutdown和close的区别
- linux_ubuntu_修改默认语言
- [VC++]释放资源文件
- codeforces_1A Theatre Square
- TQ2440第一个裸板程序led