1. 程式人生 > >【入門程式設計題】--3.字串操作問題

【入門程式設計題】--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

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