首页 > 代码库 > ACM俱乐部 字符串

ACM俱乐部 字符串

数制转换分数: 2

时间限制:1 秒
内存限制:32 兆
特殊判题: 否
提交:59
解决: 24

标签

  • 进制转换

题目描述

 

求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

 

输入格式

 

输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

 

输出

 

可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

 

样例输入

4 123 10

样例输出

27

提示[+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

分类

  • 北京大学研究生复试上机真题
  •  
  •  
  •  1 #include <iostream> 2 #include <string> 3 #include <algorithm> 4 using namespace std; 5   string shuzi="0123456789ABCDEF";//用来 根据整数查找字符串中字符的位置 6   int ch[128]={0};//根据字符存放该字符所对应的整数值 7 long toshi(string str,int a) 8 { 9 int sum=0;10 for(int i=0;i<str.length();i++)11 {12   sum=sum*a+ch[str[i]];13 }14 return sum;15 }16 string change(int sum,int b)17 {18     string change="";19 if(sum==0)  change="0";//"0"不要忘掉20 while(sum>0)21 {22   change=change+shuzi[sum%b];23   sum=sum/b;24 }25 reverse(change.begin(),change.end());26 return change;27 }28 int main()29 {30   for(int i=0;i<10;i++)31  ch[0+i]=i;32   for(int i=0;i<7;i++)33   {34       ch[A+i]=10+i;35  ch[a+i]=10+i;36   }37   int a,b;38   string str;39   while(cin>>a>>str>>b)40   {41        int sum=toshi(str,a);42   string cha=change(sum,b);43   cout<<cha<<endl;44   }45 }

     

  •  
  •  
  •  
  •  

















统计单词分数: 1.5

时间限制:1 秒
内存限制:32 兆
特殊判题: 否
提交:95
解决: 44

标签

  • 字符串处理
  • 统计单词数

题目描述

 

编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。
(凡是以一个或多个空格隔开的部分就为一个单词)

 

输入格式

 

输入包括1行字符串,以“.”结束,字符串中包含多个单词,单词之间以一个或多个空格隔开。

 

输出

 

可能有多组测试数据,对于每组数据,
输出字符串中每个单词包含的字母的个数。

 

样例输入

hello how are you.

样例输出

5 3 3 3

提示[+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

分类

  • 华中科技大学究生复试上机真题
  •  
  •  
  •  1 #include <iostream> 2 #include <string> 3 using namespace std; 4 int main() 5 { 6   string ss; 7   while(getline(cin,ss)) 8   { 9      int n=0;int sum=0;10 while(ss[n]!=.)11 {12    if(ss[n]== )13 if(sum!=0)14 {15   cout<<sum<<" ";16   sum=0;17 }18 if(ss[n]!= )19 sum++;20 n++;21 }22 cout<<sum<<endl;23   }24 }

     

  •  












字符串的查找删除

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:2798

解决:1101

题目描述:

给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。

输入:

输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。

输出:

删除输入的短字符串(不区分大小写)并去掉空格,输出。

样例输入:
in#include int main(){printf(" Hi ");}
样例输出:
#cludetma(){prtf("Hi");}
提示:

注:将字符串中的In、IN、iN、in删除。

来源:
2009年北京航空航天大学计算机研究生机试真题


天勤给出的答案是错的,没有考虑到“i      nwdqwd”的情况,应该先删空格,然后在删“in”

这题我的代码天勤自己的OJ AC不了,九度的可以

 1  #include<iostream> 2  3 #include<string> 4 using namespace std; 5   6       7 string low(string str) 8 { 9     for(int i=0;i<str.length();i++)10         if(str[i]<=Z&&str[i]>=A) str[i]=str[i]+a-A;11     return str;12 }13  14 int main()15 {16     int n=0;17     string s1,s2;18     getline(cin,s1);19     while(getline(cin,s2))20     {21          22        string temp=low(s1);23         int j=0;24         while(j<s2.length())25         {26             if(s2[j]== )27                 s2=s2.substr(0,j)+s2.substr(j+1,s2.length());28             else29                 j++;30         }31         j=0;32         while(j<s2.length())33         {34              if(low(s2.substr(j,s1.length()))==s1)35                 s2=s2.substr(0,j)+s2.substr(j+s1.length(),s2.length());36              else37                 j++;38         }39         cout<<s2<<endl;40     }41     return 0;42 }43 /**************************************************************44     Problem: 116845     User: 2009declan46     Language: C++47     Result: Accepted48     Time:0 ms49     Memory:1520 kb50 ****************************************************************/

 














最长&最短文本分数: 1.5

时间限制:1 秒
内存限制:32 兆
特殊判题: 否
提交:92
解决: 43

标签

  • 字符串处理
  • 字符串长度

题目描述

 

输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。

 

输入格式

 

输入包括多行字符串,字符串的长度len,(1<=len<=1000)。

 

输出

 

按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。

 

样例输入

hello
she
sorry
he

样例输出

he
hello
sorry

提示[+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

分类

  • 华中科技大学究生复试上机真题
  •  
  •  
  •  
  •  1 #include<iostream> 2 #include<string> 3 using namespace std; 4 int main() 5 { 6 string s1[1000]; 7 int n=0; 8 while(getline(cin,s1[n])) 9 {10 n++;11 }12 int max=s1[0].length();13 int min=s1[0].length();14 for(int i=1;i<n;i++)15 {16 if(s1[i].length()>max) max=s1[i].length();17 if(s1[i].length()<min) min=s1[i].length();18 }19 for(int i=0;i<n;i++)20 {21 if(s1[i].length()==min) cout<<s1[i]<<endl;;22 }23 for(int i=0;i<n;i++)24 {25 if(s1[i].length()==max) cout<<s1[i]<<endl;;26 }27 return 0;28 }29  

     

  •  
  •  
  •  













首字母大写分数: 1.5

时间限制:1 秒
内存限制:32 兆
特殊判题: 否
提交:95
解决: 48

标签

  • 字符串处理

题目描述

 

对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。
在字符串中,单词之间通过空白符分隔,空白符包括:空格(‘ ‘)、制表符(‘\t‘)、回车符(‘\r‘)、换行符(‘\n‘)。

 

输入格式

 

输入一行:待处理的字符串(长度小于100)。

 

输出

 

可能有多组测试数据,对于每组数据,
输出一行:转换后的字符串。

 

样例输入

if so, you already have a google account. you can sign in on the right.

样例输出

If So, You Already Have A Google Account. You Can Sign In On The Right.

提示[+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

分类

  • 北京大学研究生复试上机真题
  •  
  •  
  •  
  •  WS  :测试文件:/test0.out 结果:答案错误=======原因======当参考答案输出:wang Is A String-------时---------你的程序输出:Wang Is A String=================测试文件:/sample.out 结果:答案正确 
  •  想不通为什么会有第一个是小写的w的情况,估计是OJ错了
  • 天勤上面的答案没有考虑到标点符号 
  • 给出自己的代码
  •  1 #include<iostream> 2 #include<string> 3 using namespace std; 4 int main() 5 { 6 string s; 7 int n=0; 8     while(getline(cin,s)) 9 {10 if(s[0]>=a&&s[0]<=z)  s[0]=s[0]-(a-A);//先检查第一个11 for(int i=0;i<s.length()-1;i++)12 {13 if(s[i]<A||(s[i]>Z&&s[i]<a)||s[i]>z)14 if(s[i+1]>=a&&s[i+1]<=z)15                       s[i+1]=s[i+1]-(a-A);16 }17 cout<<s<<endl;18 }19   return 0;20 }

     

  •  
  •  
  •  
  •  
  •  
  •  







 

字符串的反码分数: 1.2

时间限制:1 秒
内存限制:32 兆
特殊判题: 否
提交:143
解决: 47

标签

  • 字符转换

题目描述

 

一个二进制数,将其每一位取反,称之为这个数的反码。下面我们定义一个字符的反码。如果这是一个小写字符,则它和字符‘a’的距离与它的反码和字符‘z’ 的距离相同;如果是一个大写字符,则它和字符‘A’的距离与它的反码和字符‘Z’的距离相同;如果不是上面两种情况,它的反码就是它自身。

举几个例子,‘a’的反码是‘z’;‘c’的反码是‘x’;‘W’的反码是‘D’;‘1’的反码还是‘1’;‘$‘的反码还是‘$‘。
一个字符串的反码定义为其所有字符的反码。我们的任务就是计算出给定字符串的反码。

 

输入格式

 

输入每行都是一个字符串,字符串长度不超过 80 个字符。如果输入只有!,表示输入结束,不需要处理。

 

输出

 

对于输入的每个字符串,输出其反码,每个数据占一行。

 

样例输入

Hello 
JLU-CCST-2011 
!

样例输出

Svool 
QOF-XXHG-2011

提示[+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

分类

  • 吉林大学究生复试上机真题
  •  
  •  1 #include<iostream> 2 #include<string> 3 using namespace std; 4 int main() 5 { 6 string s; 7     while(getline(cin,s)) 8 { 9 if(s[0]==!&&s.length()==1) break;//注意:只有一个“!”10   string s1=s;//目的是复制长度11   for(int i=0;i<s.length();i++)12   {13      if(a<=s[i]&&s[i]<=z)14  s1[i]=z-(s[i]-a);15  else if(A<=s[i]&&s[i]<=Z)16  s1[i]=Z-(s[i]-A);17  else s1[i]=s[i];18   }19   cout<<s1<<endl;20 }21   return 0;22 }

     

  •  






统计字符分数: 1

时间限制:1 秒
内存限制:32 兆
特殊判题: 否
提交:138
解决: 78

标签

  • 字符串处理
  • 统计字符

题目描述

 

统计一个给定字符串中指定的字符出现的次数。

 

输入格式

 

测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串。注意这里的字符串包含空格,即空格也可能是要求被统计的字符之一。当读到‘#‘时输入结束,相应的结果不要输出。

 

输出

 

对每个测试用例,统计第1行中字符串的每个字符在第2行字符串中出现的次数,按如下格式输出:
c0 n0
c1 n1
c2 n2
... 
其中ci是第1行中第i个字符,ni是ci出现的次数。

 

样例输入

I
THIS IS A TEST
i ng
this is a long test string
#

样例输出

I 2
i 3
  5
n 2
g 2

提示[+]

*** 提示已隐藏,点击上方 [+] 可显示 ***

分类

  • 浙江大学研究生复试上机真题
  •  
  •  
  •  
  •  1 #include<iostream> 2 #include<string> 3 using namespace std; 4 int main() 5 { 6 string a,b; 7 while(getline(cin,a)&&(a[0]!=#))//getline(cin,str)读取一行 8 { 9  getline(cin,b);10  int count[128]={0};//ASCII码有128种11  for(int i=0;i<b.length();i++)12     count[b[i]]++;13   for(int i=0;i<a.length();i++)14     cout<<a[i]<<" "<<count[a[i]]<<endl;15 }16   return 0;17 }18  

     





 
 

ACM俱乐部 字符串