华为上机笔试题——字符串转换

来源:互联网 发布: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);}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 学信网注册身份证重复怎么办 学历和学位认证怎么办 假学历无法认证怎么办 学历认证没照片怎么办? 毕业证封皮丢了怎么办 留服认证不了怎么办 无公害认证书怎么办 假学历认证报告怎么办 留学要求寄原件怎么办 干部小三怀孕怎么办? 小三的孩子怎么办 把小三打住院了怎么办 小月子没人伺候怎么办 寝室室友有狐臭怎么办 室友在寝室养猫怎么办 和直接领导不合怎么办 房产共有人去世怎么办 发现邪教宣传内容怎么办 说课时两个课时怎么办 投稿文章被拒绝怎么办 中立性细胞偏低怎么办? 孩子爱告状老师怎么办 高中学不好数学怎么办 想做老师应该怎么办 教师职称换学校怎么办 大四差选修学分怎么办 尔雅通识课学分没修满怎么办 大学全英文授课怎么办 小孩脑部有囊肿怎么办 防震期间门应该怎么办 在家待着没意思怎么办 人户分离上学怎么办 小孩上学没人接送怎么办 宝宝上学没人接送怎么办 上海浦东新区酒类许可证怎么办 金税盘里报税处理打不开怎么办 惠民卡到期了怎么办 遇到不拴狗链的主人怎么办 平安福没钱续保怎么办 提前很久到机场怎么办 机场来早了怎么办