【入门编程题】--3.字符串操作问题

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;
}

猜你喜欢

转载自blog.csdn.net/wxq_1993/article/details/85291599