【2012年华为校园招聘软开上机-成都】字母转换、统计单词个数
2013-09-11 15:22
561 查看
2013-09-11 15:18:51
1 字串转换
问题描述:
将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。
要求实现函数:
int convert(char *input,char* output)
【输入】 char *input , 输入的字符串
【输出】 char *output ,输出的字符串
【返回】 无
示例
输入:char*input="abcd"
输出:char*output="bcde"
输入:char*input="abbbcd"
输出:char*output="bcdcde"
2 字符串处理转换
问题描述:
在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
要求实现函数:
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[]=""
代码:
测试结果:
1 字串转换
问题描述:
将输入的字符串(字符串仅包含小写字母‘a’到‘z’),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。
要求实现函数:
int convert(char *input,char* output)
【输入】 char *input , 输入的字符串
【输出】 char *output ,输出的字符串
【返回】 无
示例
输入:char*input="abcd"
输出:char*output="bcde"
输入:char*input="abbbcd"
输出:char*output="bcdcde"
2 字符串处理转换
问题描述:
在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格、问号、数字等等;另外单个字母不算单词);找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中;如果某个单词重复出现多次,则只输出一次;如果整个输入的字符串中没有找到单词,请输出空串。输出的单词之间使用一个“空格”隔开,最后一个单词后不加空格。
要求实现函数:
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 <cassert> #include <map> #include<string> using namespace std; typedef char DataType; const size_t SIZE = 100; void StringConvert(DataType *pInputStr,DataType *pOutputStr) { assert(pInputStr != NULL && pOutputStr != NULL); DataType *pInCur = pInputStr; //DataType *pInPre = "\0"; DataType CharInPre = '\0'; DataType *pOutCur = pOutputStr; size_t increment = 0; while (*pInCur) { assert(*pInCur >= 'a' && *pInCur <= 'z'); if (*pInCur == CharInPre) { increment = 2; //pInPre = '\0'; //用指针将会改变源输入字符串,因此用CharInPre CharInPre = '\0'; //将CharInPre归零,使得出现2次以上的字符俺第一次出现处理 } else { increment = 1; CharInPre = *pInCur; } //*pOutCur = 'a' + (*pInCur - 'a' + increment) % ('z' - 'a'); *pOutCur++ = 'a' + (*pInCur - 'a' + increment) % 26; ++pInCur; } } bool IsAlphabet(char ch) { return ( (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')); } void CountWord(const string &inputStr,string &outputStr) //注意此处输出必须使用引用形参 { multimap<int,string,greater<int>> mapLengthWord; //map<int,string,greater<int>> mapLengthWord; string tmpStr; size_t tmpLen = 0; size_t index = 0; while (index < inputStr.length() ) { tmpStr.erase(0,tmpStr.length()); //注意清零 while (index < inputStr.length()) { if ( !IsAlphabet(inputStr.at(index)) ) { break; } tmpStr.push_back(inputStr.at(index)); ++index; } tmpLen = tmpStr.length(); if ( tmpLen >= 2) { mapLengthWord.insert(multimap<int,string>::value_type (tmpLen,tmpStr)); } ++index; } multimap<int,string,greater<int>> ::iterator iter; //map<int,string,greater<int>> ::iterator iter; //cout<<"mapLengthWord.size() = "<<mapLengthWord.size()<<endl; for (iter = mapLengthWord.begin();iter != mapLengthWord.end();++iter) { cout<<iter->first<<" "<<outputStr<<endl; if (iter != mapLengthWord.begin() ) //不支持iter + n的算术操作 { outputStr.append(" " + iter->second); } else { outputStr.append(iter->second); } } } void TestDriver() { //测试StringConvert //DataType pInputStr[SIZE] = "abcd"; //DataType pInputStr[SIZE] = "abbcd"; //DataType pInputStr[SIZE] = "abbbcd"; /*DataType pInputStr[SIZE] = ""; DataType pOutputStr[SIZE] = ""; StringConvert(pInputStr,pOutputStr); cout<<"pInputStr = "<<pInputStr<<endl; cout<<"pOutputStr = "<<pOutputStr<<endl;*/ //测试CountWord //string inputStr = "some local buses, some1234123drivers"; //string inputStr = "sometimes abc de, some1234123here#a@as$drivers"; string inputStr = "%A^123 t 3453i*()"; string outputStr; CountWord(inputStr,outputStr); cout<<"inputStr = "<<inputStr<<endl; //要输出string类型的变量,需包含string头文件 cout<<"outputStr = "<<outputStr<<endl; } int main() { TestDriver(); return 0; }
测试结果:
inputStr = sometimes abc de, some1234123here#a@as$drivers outputStr = sometimes drivers some here abc de as 请按任意键继续. . .
相关文章推荐
- 华为2013校园招聘上机笔试题-整数转换成字符串
- 华为2013校园招聘上机笔试题 ---2 字符串处理转换
- 2012年华为校园招聘上机试题(重庆地区)及答案解析
- 2012届华为校园招聘上机考试题目--成都
- 【2014华为校园招聘成都上机笔试题目】
- 华为2013校园招聘上机笔试题--字串转换
- 2012届华为校园招聘上机考试题目第一题和答案
- 华为 2016 校园招聘上机笔试题 题解
- 华为2016校园招聘上机笔试题1最高分是多少
- 华为2016校园招聘上机笔试题
- 华为软件校园招聘编程上机题目(1)
- 2012华为校园招聘上机笔试题---版本1
- 华为2013校园招聘上机笔试题-删除一个字符串中出现次数最少的字符
- 华为校园招聘上机考试题目
- 华为2016校园招聘上机笔试题2扑克牌大小
- 华为2013校园招聘上机笔试题-杭州-亲身体会
- 2012届华为校园招聘上机考试题目程序实现(9月6日下午1点场)
- 2012华为校园招聘上机试题大全及答案(软件)
- 华为校园招聘上机试题 Java实现(二)
- 华为2017校园招聘编程题——去除一段话字符串中重复单词