【入門程式設計題】--3.字串操作問題
阿新 • • 發佈:2019-01-05
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; }