您的位置:首页 > 其它

字符串基础题2道-NYOJ-113(字符串替换)-519(密码发生器)

2016-04-27 14:47 295 查看
题目链接:

http://acm.nyist.net/JudgeOnline/problem.php?pid=113

http://acm.nyist.net/JudgeOnline/problem.php?pid=519

113:

这个题两种做法,分别是常规做法与STL做法;

其中常规做法没什么好讲,STL做法使用到replace()函数与find()函数;

常规做法:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
char str[1050];
while(gets(str))
{
int l=strlen(str);
for(int i=0;i<l;i++)
{
if(str[i]=='y'&& str[i+1]=='o' && str[i+2]=='u')
{
cout<<"we";
i+=2;
}
else
cout<<str[i];
}
cout<<endl;
}
return 0;
}


STL做法:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
string ch,ch1="we";
getline(cin,ch);
while(ch!="")
{
int l=ch.length();
string::size_type it; //声明string类型的迭代器
it=ch.find("you");
while(it<l) //注意结束条件
{
ch.replace(ch.begin()+it,ch.begin()+it+3,ch1.begin(),ch1.end());
it=ch.find("you");
}
l=ch.length();
cout<<ch<<endl;
getline(cin,ch);
}
return 0;
}


519:

这个题关键是如何实现在题目中提到的缩位操作,我是直接写的递归实现;

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char str[105];
int num[6];
int ans[6];
int sum_all(int n)  //递归实现
{
int sum=0;
if(n<10)
return n;
else
{
while(n>=10)
{
sum+=n%10;
n/=10;
}
sum+=n%10;
if(sum>=10)
n=sum_all(sum);
else
n=sum;
}
return n;
}
int main()
{
int T;
cin>>T;
getchar();
while(cin>>str)
{
getchar();
memset(num,0,sizeof(num));
int l=strlen(str);
for(int i=0;i<l;i++)
num[i%6]+=str[i];
for(int i=0;i<6;i++)
ans[i]=sum_all(num[i]);
for(int i=0;i<6;i++)
cout<<ans[i];
cout<<endl;
memset(str,0,sizeof(str));
}
return 0;
}


仅代表个人观点,欢迎交流探讨,勿喷~~



PhotoBy:WLOP

http://weibo.com/wlop
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: