第一题(60分):
按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”
我写的代码如下:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void cutString(vector<string> &str,unsigned int stringLength);
int main()
{
int stringCount=0;
unsigned int stringLength =0;
vector<string> str;
cout<<"请输入两个整数:"<<endl;
cin>>stringCount>>stringLength;
cout<<stringCount<<" "<<stringLength<<endl;
for (int i=0;i<stringCount;++i)
{
string s;
cin>>s;
str.push_back(s);
}
//字符串处理
cutString(str,stringLength);
//输出处理后的字符串
for (vector<string>::iterator iter=str.begin();iter!=str.end();++iter)
{
cout<<*iter<<endl;
}
}
//传的参数是引用,可以避免对对象的拷贝
void cutString(vector<string> &str, unsigned int stringLength)
{
for (vector<string>::iterator iter=str.begin();iter!=str.end();++iter) //遍历字符串
{
if (iter->size()>stringLength)
{
string s;
int cut_n=iter->size()/stringLength; //计算要剪切的次数
for (int k=0; k<cut_n;++k)
{
int j=iter->size() -stringLength;
s.clear();
for (int i=0;i<j;++i) //保存多余的字符串
{
s.push_back((*iter)[stringLength+i]);
}
iter->erase(stringLength); //删除从stringLength开始至末尾的所有字符串
iter=str.insert(iter+1,s);
}
}
if (iter->size()<stringLength) //字符串长度小于给定长度,补零
{
int i=stringLength-iter->size(); //计算要补零的个数
while (i--)
{
iter->push_back('0');
}
}
}
}
还是一道第一题,我另一个同学记得
第一题:拼音转数字
输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下:
描述: 拼音 yi er san si wu liu qi ba jiu
阿拉伯数字 1 2 3 4 5 6 7 8 9
输入字符只包含小写字母,所有字符都可以正好匹配
运行时间限制:无限制
内存限制: 无限制
输入: 一行字符串,长度小于1000
输出: 一行字符(数字)串
样例输入: yiersansi
样例输出: 1234
我的代码:
#include <iostream>
#include <string>
#include<vector>
using namespace std;
int main()
{
string s;
vector<int> number;
cout<<"请输入一串字符串"<<endl;
getline(cin,s);
for(string::size_type i=0;i<s.size();++i)
{
switch(s[i])
{
case 'y': //1
{
number.push_back(1);
++i;
}
break;
case 'e': //2
{
number.push_back(2);
++i;
}
break;
case 's': //3,4
{
if(s[++i]=='i') //4
{
number.push_back(4);
}
else
{
number.push_back(3);
++i; //i已经加过一次,所以只用加一次就行了
}
}
break;
case 'w': //5
{
number.push_back(5);
++i;
}
break;
case 'l': //6
{
number.push_back(6);
i+=2;
}
break;
case 'q': //7
{
number.push_back(7);
i++;
}
break;
case 'b': //8
{
number.push_back(8);
i++;
}
break;
case 'j': //9
{
number.push_back(9);
i+=2;
}
break;
default:
break;
}
}
cout<<s<<endl;
//打印
vector<int>::iterator iter=number.begin();
while(iter!=number.end())
{
cout<<*iter++;
}
cout<<endl;
return 0;
}
第二题:去除重复字符并排序
运行时间限制:无限制
内容限制: 无限制
输入: 字符串
输出: 去除重复字符并排序的字符串
样例输入: aabcdefff
样例输出: abcdef
我的代码:
#include <iostream>
#include <string>
#include<vector>
#include <algorithm> //算法
using namespace std;
int main()
{
string s;
cout<<"请输入一串字符串"<<endl;
getline(cin,s);
//排序
sort(begin(s),end(s)); //sort 在头文件<algorithm>
string::iterator iter=s.begin();
while(iter!=(s.end()-1)) //这里必须是-1,否则下面的iter+1会越界;
{
if(*iter==*(iter+1))
{
iter=s.erase(iter); //返回被删除元素后一个元素的迭代器
}
else
{
++iter;
}
}
cout<<s<<endl;
//打印
return 0;
}
第三题:等式变换
输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足输入整数的所有整数个数。
输入: 正整数,等式右边的数字
输出: 使该等式成立的个数
样例输入:5
样例输出:23
代码:
可以参考:
http://blog.csdn.net/feifeiyanfeifeia/article/details/38143419