3.字符串问题
ISBN号码 ISBN码包括99位数字、11位识别码和33位分隔符,其规定格式如x-xxx-xxxxx-x
,其中符号-
就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4
就是一个标准的ISBN码。首位数字乘以11加上次位数字乘以22……以此类推,用所得的结果\bmod 11mod11,所得的余数即为识别码,如果余数为1010,则识别码为大写字母XX。例如ISBN号码0-670-82162-4
中的识别码44是这样得到的:对067082162
这99个数字,从左至右,分别乘以1,2,...,91,2,...,9再求和,即0×1+6×2+……+2×9=1580×1+6×2+……+2×9=158,然后取158 \bmod 11158mod11的结果44作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出Right
;如果错误,则输出你认为是正确的ISBN号码。
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[14],mod[12]="0123456789X";
//存放字符串数组时,最后一个位置是\0,所以申请内存长度要+1.
int sum=0,j=1;
cin>>a;
for(int i=0;i<12;i++){
if(a[i]=='-')
continue;
sum+=(a[i]-'0')*j++;
//‘0’是0的ASCII码,用字符型的数字减去零的ASCII码得到整形数字。
}
if(mod[sum%11]==a[12])
cout<<"Right"<<endl;
else{
a[12]=mod[sum%11];
cout<<a<<endl;
}
return 0;
}
4.统计单词次数
输入格式:
共22行。
第11行为一个字符串,其中只含字母,表示给定单词;
第22行为一个字符串,其中只可能包含字母和空格,表示给定的文章。
输出格式:
一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从00 开始);如果单词在文章中没有出现,则直接输出一个整数-1
扫描二维码关注公众号,回复:
4794405 查看本文章
#include<iostream>
#include<algorithm>
#include<functional>
#include<string>
using namespace std;
int main()
{
string s1,s2;
getline(cin,s1);
getline(cin,s2);
//输入字符串string,getline(cin,s);
//输入字符串数组,cin.getline(a,10);
for(int i=0;i<s1.length();i++){
s1[i]=tolower(s1[i]);
//转换大小写,tolower();
}
for(int i=0;i<s2.length();i++)
{
s2[i]=tolower(s2[i]);
}
s1=' '+s1+' ';
s2=' '+s2+' ';
if(s2.find(s1)==string::npos){
cout<<-1<<endl;
}
//string库中的find()函数和npos()函数,npos函数的返回值是一个常数,
//如果字符串存在包含关系,其返回值不等于npos,即(s2.find(s1)!=string::npos) => s2包含s1
else{
int a=s2.find(s1);
int b=s2.find(s1),s=0;
while(b!=string::npos){
s++;
b=s2.find(s1,b+1);
}
cout<<s<<" "<<a<<endl;
}
return 0;
}