您的位置:首页 > 其它

UVa Volume 1. Elementary Problem Solving :: String

2010-05-19 22:12 399 查看
Volume
1. Elementary Problem Solving
:: String

string基础知识:http://hi.baidu.com/ybbaigo/blog/item/ce1490fb51e6a561034f5648.html

1.

401 - Palindromes

题目大意:判断一个字符串是不是回文串和镜像串

#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
char a[35]={'A',' ',' ',' ','3',' ',' ','H','I','L',' ','J','M',' ','O',' ',' ',' ','2','T','U','V','W','X','Y','5','1','S','E',' ','Z',' ',' ','8',' '};
string s;
int l,i,flag1,flag2;
while(cin>>s)
{
flag1=1;flag2=1;l=s.length();
for(i=0;i<l/2;i++)if(s[i]!=s[l-i-1]){flag1=0;break;}
for(i=0;i<l;i++)
{
if(isalpha(s[l-i-1])){if(s[i]!=a[(int)s[l-i-1]-'A']){flag2=0;break;}}
else if(s[i]!=a[(int)s[l-i-1]-'1'+26]){flag2=0;break;}
}
if(!flag1&&!flag2)cout<<s<<" -- is not a palindrome./n";
else if(flag1&&!flag2)cout<<s<<" -- is a regular palindrome./n";
else if(!flag1&&flag2)cout<<s<<" -- is a mirrored string./n";
else cout<<s<<" -- is a mirrored palindrome./n";
cout<<endl;
}
return 0;
}


没什么技术含量,就是数组赋初值和字符转化为数组下标两点

2.

10010 - Where's
Waldorf?

题目大意:在一个给定的字符矩阵中找到所给字符串,8个方向都行

#include <iostream>
#include <string>
#include <cctype>
using namespace std;
//ifstream fin("in.in");
string a[100],b;
int flag,num,i,j,m,n,k,t,x,y,l;
int main()
{
cin>>num;
for(j=1;j<=num;j++)
{
cin>>m>>n;
for(i=0;i<m;i++)
{
cin>>a[i];
for(k=0;k<a[i].length();k++)a[i][k]=toupper(a[i][k]);
}
cin>>k;
for(i=0;i<k;i++)
{
cin>>b;
l=b.length();
for(t=0;t<l;t++)b[t]=toupper(b[t]);
for(y=0;y<n;y++)
{
flag=0;
for(x=0;x<m;x++)
{
if(x+l-1<m)
{
flag=1;
for(t=0;t<l;t++)if(a[x+t][y]!=b[t]){flag=0;break;}
if(flag){cout<<x+1<<" "<<y+1<<endl;break;}
}

if(y+l-1<n)
{
flag=1;
for(t=0;t<l;t++)if(a[x][y+t]!=b[t]){flag=0;break;}
if(flag){cout<<x+1<<" "<<y+1<<endl;break;}
}

if(x-l+1>=0)
{
flag=1;
for(t=0;t<l;t++)if(a[x-t][y]!=b[t]){flag=0;break;}
if(flag){cout<<x+1<<" "<<y+1<<endl;break;}
}

if(y-l+1>=0)
{
flag=1;
for(t=0;t<l;t++)if(a[x][y-t]!=b[t]){flag=0;break;}
if(flag){cout<<x+1<<" "<<y+1<<endl;break;}
}

if(x+l-1<m&&y+l-1<n)
{
flag=1;
for(t=0;t<l;t++)if(a[x+t][y+t]!=b[t]){flag=0;break;}
if(flag){cout<<x+1<<" "<<y+1<<endl;break;}
}

if(x-l+1>=0&&y+l-1<n)
{
flag=1;
for(t=0;t<l;t++)if(a[x-t][y+t]!=b[t]){flag=0;break;}
if(flag){cout<<x+1<<" "<<y+1<<endl;break;}
}

if(x+l-1<m&&y-l+1>=0)
{
flag=1;
for(t=0;t<l;t++)if(a[x+t][y-t]!=b[t]){flag=0;break;}
if(flag){cout<<x+1<<" "<<y+1<<endl;break;}
}

if(x-l+1>=0&&y-l+1>=0)
{
flag=1;
for(t=0;t<l;t++)if(a[x-t][y-t]!=b[t]){flag=0;break;}
if(flag){cout<<x+1<<" "<<y+1<<endl;break;}
}
}
if(flag)break;
}
}
if(j!=num)cout<<endl;
}
return 0;
}


首先是都要转化成大写字母,其次可以用方向数组来简化代码,不用写8个方向,只写一个就行了,再有flag=1;要写到if语句里面,否则会有很诡异的错误。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string
相关文章推荐