noi寒假刷題之旅_1.7編程基礎之字符串(35題)


»1.7編程基礎之字符串(35題)

01:統計數字字符個數

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string a;
	getline(cin,a);
	int count=0;
	for(int i=0;i<a.length();++i)
	{
		if('0'<=a[i]&&a[i]<='9')count++;
	}
	cout<<count;
	return 0;
}

02:找第一個只出現一次的字符

#include<iostream>
#include<string>
using namespace std;	
int num[26]={}; 
int main()
{
	string a;
	cin>>a;
	int flag=1;
	int c=a.length();
	for(int i=0;i<c;++i)
	{	
		num[a[i]-'a']++;
	}
	for(int j=0;j<c;++j)
	{
		if(num[a[j]-'a']==1)
		{
			flag=0;
			printf("%c",a[j]);
			break;
		}
	}
	if(flag)
	{
		cout<<"no"; 
	}
	return 0;
}

03:基因相關性

#include<iostream>
#include<string>
using namespace std;	
int num[26]={}; 
int main()
{
	double flag;cin>>flag;
	string one;cin>>one;
	string two;cin>>two;
	int len=one.length();
	double same=0;
	for(int i=0;i<len;++i)
	{
		if(one[i]==two[i])same++;
	}
	if((same/len)<flag)
	{
		cout<<"no";
	}
	else
	{
		cout<<"yes";
	}
	return 0;
}

04:石頭剪子布

#include<iostream>
#include<string>
using namespace std;	
int num[26]={}; 
int Result(string one,string two)
{
	if((one=="Scissors"&&two=="Paper")||(one=="Paper"&&two=="Rock")||(one=="Rock"&&two=="Scissors"))
	{
		return 1;
	}
	else if(one==two)
	{
		return 0;
	}
	else
	{
		return 2;
	}
	
}
int main()
{
	int n;cin>>n;
	string one;
	string two;
	for(int i=0;i<n;++i)
	{
		cin>>one>>two;
		int c=Result(one,two);
		if(c==1)
		{
			cout<<"Player1\n";
		}
		else if(c==2)
		{
			cout<<"Player2\n";
		}
		else
		{
			cout<<"Tie\n";
		}
	}
	return 0;
}

05:輸出親朋字符串

#include<iostream>
#include<string>
using namespace std;	
int main()
{
	string s1;
	getline(cin,s1);
	string s2="";
	for(int i=0;i<s1.length()-1;++i)
	{
		int t1=s1[i];
		int t2=s1[i+1];
		char t3=t1+t2;
		s2+=t3;
	}
	int r=(int)s1[s1.length()-1]+(int)s1[0];
	s2+=(char)r;
	cout<<s2<<endl;
	return 0;
}
/*
WA了兩發,忘記了有可能輸入帶空格這種條件
*/

06:合法 C 標識符

#include<iostream>
#include<string>
using namespace std;
bool One(string a)
{
	string table[]={
	"auto","break","case","char",
	"const","continue","default","do",
	"double","else","enum","extern",
	"float","for","goto","if",
	"int","long","return","short",
	"signed","sizeof","static","struct",
	"switch","typedef","union","unsigned",
	"void","volatile","while"	};	
	for(int i=0;i<31;++i)
	{
		if(table[i]==a)
		{
			return false;
		}
	}
	return true;
}	
bool Two(string a)
{
	for(int i=0;i<a.length();++i)
	{
		if(('0'<=a[i]&&a[i]<='9')||('a'<=a[i]&&a[i]<='z')||('A'<=a[i]&&a[i]<='Z')||(a[i]=='_'))
		{
			;
		}
		else
		{
			return false;
		}
	}
	return true;
}
bool Three(string a)
{
	if('0'<=a[0]&&a[0]<='9')
	{
		return false;
	}
	else
	{
		return true;
	}
}
int main()
{
	string c;
	getline(cin,c);
	if(One(c)&&Two(c)&&Three(c))
	{
		cout<<"yes";
	}
	else
	{
		cout<<"no";
	}
	return 0;
}

07:配對鹼基鏈

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string c;
	string d="";
	getline(cin,c);
	for(int i=0;i<c.length();++i)
	{
		switch(c[i])
		{
			case 'A':d+='T';break;
			case 'T':d+='A';break;
			case 'G':d+='C';break;
			case 'C':d+='G';break; 
		}		
	}
	cout<<d;
	return 0;
}

08:字符替換

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string c;cin>>c;
	string d="";
	char ty;cin>>ty;
	char th;cin>>th;
	for(int i=0;i<c.length();++i)
	{
		if(c[i]==ty)c[i]=th;
	}
	cout<<c;	
	return 0;
}

09:密碼翻譯

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string c;
	getline(cin,c);
	for(int i=0;i<c.length();++i)
	{
		if('a'<=c[i]&&c[i]<='z')
		{
			c[i]=(c[i]+1-'a')%26+'a';	
		} 
		if('A'<=c[i]&&c[i]<='Z')
		{
			c[i]=(c[i]+1-'A')%26+'A';	
		} 
	}
	cout<<c;	
	return 0;
}

10:簡單密碼

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string c;
	getline(cin,c);
	char t2[26]={'V', 'W', 'X', 'Y', 'Z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U'};
	for(int i=0;i<c.length();++i)
	{
		if('A'<=c[i]&&c[i]<='Z')
		{
			c[i]=t2[c[i]-'A'];
		}
	}
	cout<<c;	
	return 0;
}

11:潛伏者

#include<iostream>
#include<string>
using namespace std;
char t[26];	
int s[26];
int main()
{
	string c="";	
	string bc="";
	string r="";
	
	int flag=0;
	
	getline(cin,c);
	getline(cin,bc);
	getline(cin,r);
	
	for(int i=0;i<bc.length();++i)
	{
		s[bc[i]-'A']++;
		if(t[c[i]-'A']&&t[c[i]-'A']!=bc[i])
		{
			flag=1;
			break;
		}
		t[c[i]-'A']=bc[i];
	}	
	for(int i=0;i<26;++i)
	{
		if(s[i]==0)
		{
			flag=1;
		}
	}
	if(flag)
	{
		cout<<"Failed";
		return 0;
	}	
	for(int i=0;i<r.length();++i)
	{
		r[i]=t[r[i]-'A'];
	}
	cout<<r;
		
	return 0;
}

12:加密的病歷單

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string c="";		
	int flag=0;

	getline(cin,c);

	for(int i=0;i<c.length();++i)
	{
		if('a'<=c[i]&&c[i]<='z')
		{
			c[i]=(c[i]-'a'+3+26)%26+'A';	
		}
		else if('A'<=c[i]&&c[i]<='Z')
		{
			c[i]=(c[i]-'A'+3+26)%26+'a';
		}
	}	
	reverse(c.begin(),c.end());
	cout<<c;
	return 0;
}

13:將字符串中的小寫字母轉換成大寫字母

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string c="";		
	getline(cin,c);
	for(int i=0;i<c.length();++i)
	{
		if('a'<=c[i]&&c[i]<='z')
		{
			c[i]=(c[i]-'a'+26)%26+'A';	
		}
	}	
	cout<<c;
	return 0;
}

14:大小寫字母互換

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string c="";		
	getline(cin,c);
	for(int i=0;i<c.length();++i)
	{
		if('a'<=c[i]&&c[i]<='z')
		{
			c[i]=(c[i]-'a'+26)%26+'A';	
		}
		else if('A'<=c[i]&&c[i]<='Z')
		{
			c[i]=(c[i]-'A'+26)%26+'a';
		}
	}	
	cout<<c;
	return 0;
}

15:整理葯名

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	int n;
	cin>>n;
	string c;		

	for(int i=0;i<n;++i)
	{	
		cin>>c;
		if('a'<=c[0]&&c[0]<='z')
		{
			c[0]=(c[0]-'a'+26)%26+'A';	
		}
		for(int j=1;j<c.length();++j)
		{
			if('A'<=c[j]&&c[j]<='Z')
			{
				c[j]=(c[j]-'A'+26)%26+'a';
			}
		}
		cout<<c<<endl;
	}		
	return 0;
}

16:忽略大小寫的字符串比較

#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
	string c;
	string b;
	getline(cin,c);
	getline(cin,b);		
	
	for(int i=0;i<c.length();++i)
	{	
		if('a'<=c[i]&&c[i]<='z')
		{
			c[i]=(c[i]-'a'+26)%26+'A';
		}
	}	
	for(int i=0;i<b.length();++i)
	{
		if('a'<=b[i]&&b[i]<='z')
		{
			b[i]=(b[i]-'a'+26)%26+'A';
		}	
	}	
	int ptr=c.compare(b);
	if(ptr>0)
	{
		cout<<">";
	}
	else if(ptr<0)
	{
		cout<<"<";
	}
	else
	{
		cout<<"=";
	}
	return 0;
}

17:字符串判等

#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
	string c;
	string b;
	string d;
	string e;

	getline(cin,c);
	getline(cin,b);		
	
	for(int i=0;i<c.length();++i)
	{	
		if('a'<=c[i]&&c[i]<='z')
		{
			c[i]=(c[i]-'a'+26)%26+'A';
		}
		if(c[i]!=' ')d+=c[i];
	}
	for(int i=0;i<b.length();++i)
	{
		if('a'<=b[i]&&b[i]<='z')
		{
			b[i]=(b[i]-'a'+26)%26+'A';
		}	
		if(b[i]!=' ')e+=b[i]; 
	}	
	int ptr=e.compare(d);
	if(ptr==0)
	{
		cout<<"YES";
	}
	else
	{
		cout<<"NO";
	}
	return 0;
}

18:驗證子串

#include<iostream>
using namespace std;
int main()
{
	string a,b;
	string max,min;
	getline(cin,a);
	getline(cin,b);
	if(a.length()>b.length())
	{
		max=a;
		min=b;
	}
	else
	{
		max=b;
		min=a;
	}
	int j=0;
	int i=0;
	for(;j<min.length()&&i<max.length();++i)
	{
//		cout<<i<<"_"<<max[i]<<"::"<<j<<"_"<<min[j]<<endl;
		if(min[j]==max[i])
		{
			j++;
		}
		else
		{
			j=0;
		}		
	}
	if(j==min.length())
	{
		cout<<min<<" is substring of "<<max;
	}
	else
	{
		cout<<"No substring";
	}
	
	return 0;
} 

19:字符串移位包含問題

#include<iostream>
using namespace std;
int main()
{
	string a,b,c="";
	string max,min;
	cin>>max>>min;
	if(max.length()>min.length())
	{
		a=max;
		b=min;
	}
	else
	{
		a=min;
		b=max;
	}
	int len=a.length();
	for(int i=1;i<len;++i)
	{
		c=a.substr(i)+a.substr(0,i);
		if(c.find(b)!=string::npos)
		{
			cout<<"true";
			return 0; 
		}
//		cout<<c<<endl;
	}
	if(a.find(b)!=string::npos)
	{
		cout<<"true";
	}
	else
	{
		cout<<"false"; 
	}
	return 0;
} 

20:刪除單詞后綴【字符串飯庄+字符串查找】

#include<iostream>
using namespace std;
int main()
{
	string a,b[3]={"er","ly"};
	string max,min;
	cin>>a;
	
	if(a.length()>2)
	{
		if("ing"==a.substr(a.length()-3)&&a.length()>3)
		{
			 a=a.substr(0,a.length()-3);
		}
		else
		{
			for(int i=0;i<2;++i)
			{
				string::size_type pos=a.find(b[i]);
				if(pos!=string::npos)
				{
					a=a.substr(0,a.length()-2);
					break;
				}
			}
		}
	}
		
	cout<<a;
	return 0;
} 

21:單詞替換

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string a,b,c;
	getline(cin,a);
	getline(cin,b);
	getline(cin,c);
	
	int fk=0;
	while(1)
	{
		string::size_type pos=a.find(b,fk++);
		if(pos!=string::npos)
		{
	        if(pos==0&&a[b.length()]==' ' ||
				pos==a.length()-b.length()&&a[pos-1]==' '||
				pos>0&&a[pos-1]==' '&&a[pos+b.length()]==' ') 
				a=a.substr(0,pos)+c+a.substr(pos+b.length());
		}
		else
		{
			break;
		}
	}
	cout<<a;
	return 0;
} 

22:緊急措施

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string my;
	string name,pass,email;
	int n,fk=1;
	cin>>my>>n;
	for(int i=0;i<n;++i)
	{
		cin>>name>>pass>>email;
		if(email==my)
		{
			fk=0;
			for(int j=0;j<pass.length();++j)
			{
				if('a'<=pass[j]&&pass[j]<='z')
				{
					pass[j]-=('a'-'A');
				}
				else if('A'<=pass[j]&&pass[j]<='Z')
				{
					pass[j]+=('a'-'A');
				}
			}
			cout<<name<<" "<<pass<<endl;
		}
	}
	if(fk)
	{
		cout<<"empty";
	}
	return 0;
} 

23:過濾多余的空格

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str;
	string re="";
	while(cin>>str)
	{
		re+=str+' ';
	}
	re=re.substr(0,re.length()-1);
	cout<<re;
	return 0;
} 

24:單詞的長度

#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int main()
{
	string str;
	string re="";
	while(cin>>str)
	{
		re+=to_string(str.length())+',';
	}
	re=re.substr(0,re.length()-1);
	cout<<re;
	return 0;
} 

25:最長最短單詞

#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int main()
{
	string str;
	int maxl,minl;
	string max,min;
	minl=20000;
	maxl=0;
	while(cin>>str)
	{
		if(str.length()>maxl)
		{
			max=str;
			maxl=str.length();
		}
		if(str.length()<minl)
		{
			min=str;
			minl=str.length();	
		}
	}
	cout<<max<<endl<<min;
	return 0;
} 

26:字符串最大跨距

#include<iostream>
#include<string>
#include<string.h>
using namespace std;
int main()
{
	string s,s1,s2,s3;
	cin>>s;
	s1 = s.substr(0,s.find(','));
	s2 = s.substr(s.find_first_of(',')+1,s.find_last_of(',')-s.find_first_of(',')-1);
	s3 = s.substr(s.find_last_of(',')+1);

	string::size_type a=s1.find(s2);
	string::size_type b=s1.find(s3);
	int c=-1;
	if((a!=string::npos)&&(b!=string::npos)&&(a<b)&&(a+s2.length()<=b))
	{
		c=s1.rfind(s3)-s2.length()-a;
	}
	cout<<c;
	return 0;
} 

27:單詞翻轉

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string s,s1="";
	getline(cin,s);
	s+=" ";
	for(int i=0;i<s.length();++i)
	{
		if(s[i]!=' ')
		{
			s1+=s[i];
		}
		else
		{
			reverse(s1.begin(),s1.end());
			s=s.substr(0,i-s1.length())+s1+s.substr(i);	
			s1="";
		}
	} 
	s=s.substr(0,s.length()-1);
	cout<<s;
	return 0;
} 

28:單詞倒排

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string s="",s1="";
	while(cin>>s1)
	{
		s=s1+" "+s;
	}
	s=s.substr(0,s.length()-1);
	cout<<s;
	return 0;
} 

 生化危機開始,只好在家敲敲代碼了【托腮】

29:ISBN號碼

  

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string s1="";
	char code;
	int d=0,j=1;
	cin>>s1;
	for(int i=0;i<s1.length()-2;++i)
	{
		if(s1[i]!='-')
		{
			d=d+(s1[i]-'0')*j;
			j++;
		} 
	}
	d%=11;
	if(d==10)
	{
		code='X';
	}
	else
	{
		code=d+'0';
	}
	if(code==s1[s1.length()-1])
	{
		cout<<"Right";
	}
	else
	{
		cout<<s1.substr(0,s1.length()-1)+code;
	}
	return 0;
} 

30:字符環【造環】

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string s1="",s2="";
	int re=0,a=0,b=0;
	cin>>s1>>s2;
	int le1=s1.length();
	int le2=s2.length();
	s1+=s1;
	s2+=s2;
	b=min(le1,le2);
	for(int i=0;i<le1;++i)
	{	
		for(int j=0;j<le2;++j)
		{
			re=0;//限制長度 
			//更改起始點來模擬環 
			for(int t1=i,t2=j;s1[t1]==s2[t2]&&re<b;t1++,t2++)re++;
			if(re>a)a=re;
		}
	 } 
	cout<<a;
	return 0;
} 

31:字符串p型編碼

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string s="",p="";
	int re[10]={},index=1;
	cin>>s;
	for(int i=0;i<s.length();++i)
	{	
		if(s[i]==s[i+1])
		{
			index++;	
		}
		else
		{
			cout<<to_string(index)<<s[i]; 
			index=1;
		}
	}
	return 0;
} 

32:行程長度編碼

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
	string s="",p="";
	int re[10]={},index=1;
	cin>>s;
	//大小寫處理 
	for(int i=0;i<s.length();++i)
	{	
		if('a'<=s[i]&&s[i]<='z')s[i]-=('a'-'A');
	}
	
	for(int i=0;i<s.length();++i)
	{
		
		if(s[i]==s[i+1])
		{
			index++;	
		}	
		else
		{
			cout<<"("<<s[i]<<","<<index<<")";
			index=1;
		}
	} 
	return 0;
} 

33:判斷字符串是否為回文

#include<iostream>
#include<string>
#include<algorithm>
#include<stack>
using namespace std;
int main()
{
	string s="",p="";
	int re[10]={},index=1;
	cin>>s;
	stack<char> S;
	int i=0,flag=0;
	for(;i<s.length()/2;++i) S.push(s[i]);
	if(s.length()%2)++i;
	for(;!S.empty();++i)
	{
		if(S.top()!=s[i])
		{
			flag=1;
			break;
		}
		else
		{
			S.pop();
		}
	}
	if(flag)
	{
		cout<<"no";
	}
	else
	{
		cout<<"yes";
	}
	return 0;
} 

34:回文子串

#include<iostream>
#include<string>
#include<algorithm>
#include<stack>
using namespace std;
int main()
{
	string s="",p="";
	int re[10]={},index=1,flag=0;
	cin>>s;
	for(int i=2;i<=s.length();++i)
	{
		for(int j=0;j<=s.length()-i;++j)
		{
			string t=s.substr(j,i);
			flag=0;
			for(int k=0;k<t.length()/2;++k)
			{
				if(t[k]!=t[t.length()-k-1])
				{
					flag=1;break;
				}
			}
			if(!flag)
			{
				cout<<t<<endl;
			}
		}
	}
	return 0;
} 

35:字符串的展開

#include<cstdio>
char a[300],d,e,f,j,p;
int main()
{
    int p1,p2,p3,i=0,k;
    scanf("%d%d%d%s",&p1,&p2,&p3,a);
   for(;a[i];i++)
    {
            d=a[i-1],e=a[i+1],f=a[i];
        if(f=='-'&&e>d&&(d>='0'&&e<='9'||d>='a'&&e<='z'))
     {
                   for(p3==1?j=d+1:j=e-1;p3==1?j<e:j>d;p3==1?j++:j--
          {
                                p=j;
                  if(p1==2)
                       p=(p>='a')?p-32:p;
                   else if(p1==3) p='*';
              for(k=0;k<p2;k++)
            printf("%c",p);
          }
       }
        else
            printf("%c",f);
    } 
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM