1.字符个数统计
题目描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。
输入描述:
输入N个字符,字符在ACSII码范围内。
输出描述:
输出范围在(0~127)字符的个数。
示例1
输入
abc
输出
3
#include<iostream>
#include<string>
using namespace std;
int diffCharNum(string &str){
int num[128]={0};
int j,sum=0;
if(str.length()>0){
for(int i=0;i<str.length()&&str[i]!='\n';i++){
j=(int)str[i];
if(j>=0&&j<=127){
++num[j];
}
}
}
for(j=0;j<128;j++){
if(num[j]>0)
sum++;
}
return sum;
}
int main(){
string s;
cin>>s;
cout<<diffCharNum(s);
return 0;
}
2.字符串加解密
题目描述
1、对输入的字符串进行加解密,并输出。
2加密方法为:
当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;
当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;
其他字符不做变化。
3、解密方法为加密的逆过程。
接口描述:
实现接口,每个接口实现1个基本操作:
void Encrypt (char aucPassword[], char aucResult[]):在该函数中实现字符串加密并输出
说明:
1、字符串以\0结尾。
2、字符串最长100个字符。
int unEncrypt (char result[], char password[]):在该函数中实现字符串解密并输出
说明:
1、字符串以\0结尾。
2、字符串最长100个字符。
输入描述:
输入说明
输入一串要加密的密码
输入一串加过密的密码
输出描述:
输出说明
输出加密后的字符
输出解密后的字符
示例1
输入
abcdefg
BCDEFGH
输出
BCDEFGH
abcdefg
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
void Encrypt(const string& aucPassword, char aucResult[101]){
if(aucPassword.size()>100||aucPassword.size()<1)
return ;
int i;
for(i=0;i<aucPassword.size();i++){
if(aucPassword[i]>='a'&&aucPassword[i]<='z'){
if(aucPassword[i]=='z')
aucResult[i]='A';
else
aucResult[i]=aucPassword[i]-31;//aucResult[i]=aucPassword[i]-32+1;
}else if(aucPassword[i]>='A'&&aucPassword[i]<='Z'){
if(aucPassword[i]=='Z')
aucResult[i]='a';
else
aucResult[i]=aucPassword[i]+33;//aucResult[i]=aucPassword[i]+32+1;
}else if(aucPassword[i]>='0'&&aucPassword[i]<='9'){
if(aucPassword[i]=='9')
aucResult[i]='0';
else
aucResult[i]=aucPassword[i]+1;//aucResult[i]=aucPassword[i]+32+1;
}else{
aucResult[i]=aucPassword[i];
}
}
aucResult[i]='\0';
}
int unEncrypt(char result[101], const string& password){
if(password.size()<1 || password.size()>100)
return 0;
int i;
for(i=0;i<password.size();i++){
if(password[i]>='a'&&password[i]<='z'){
if(password[i]=='a')
result[i]='Z';
else
result[i]=password[i]-33;//aucResult[i]=aucPassword[i]-32+1;
}else if(password[i]>='A'&&password[i]<='Z'){
if(password[i]=='A')
result[i]='z';
else
result[i]=password[i]+31;//aucResult[i]=aucPassword[i]+32+1;
}else if(password[i]>='0'&&password[i]<='9'){
if(password[i]=='0')
result[i]='9';
else
result[i]=password[i]-1;//aucResult[i]=aucPassword[i]+32+1;
}else{
result[i]=password[i];
}
}
result[i]='\0';
return 1;
}
int main(){
string aucPassword;
string password;
while(cin>>aucPassword>>password){
char result1[101];
char result2[101];
Encrypt(aucPassword,result1);
unEncrypt(result2,password);
cout<<result1<<endl;
cout<<result2<<endl;
}
return 0;
}
3.单词倒排
题目描述
对字符串中的所有单词进行倒排。
说明:
1、每个单词是以26个大写或小写英文字母构成;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;
输入描述:
输入一行以空格来分隔的句子
输出描述:
输出句子的逆序
示例1
输入
I am a student
输出
student a am I
#include<iostream>
#include<string>//getline(cin,str);
#include<cstring>//strtok
#include <stack>
using namespace std;
int main(){
string str;
while(getline(cin,str)){
stack<char *> ss;
char *s;
char delim[]=" ";//本意想用正则表达式[^a-zA-Z]+
char *strc=new char[strlen(str.c_str())+1];
strcpy(strc,str.c_str());
for(int i=0;i<strlen(strc);i++){//将英文大小写字母以及空格外的字符转换成空格字符
if(!((strc[i]>='a'&&strc[i]<='z')||(strc[i]>='A'&&strc[i]<='Z')||strc[i]==' '))
strc[i]=' ';
}
s=strtok(strc,delim);
while(s!=NULL){
ss.push(s);
s=strtok(NULL,delim);
}
while(!ss.empty()){
cout<<ss.top();
if(ss.size()>1)
cout<<" ";
ss.pop();
}
cout<<endl;
delete []strc;
}
return 0;
}