【AOJ]レッスン - ITP1トピック#9文字列

Wordを検索

W単語とテキストTを読み込み、テキストTに現れる単語Wの数を出力するプログラムを書きます

Tは、Tiは、空白文字や改行で区切られた文字列で構成されています。単語や文章は、ケースの小文字は区別されませんWに等しいチタンの数をカウントします。

制約

W≤10の長さ
Wは、小文字から成る
ライン≤1000におけるTの長さ

入力

最初の行では、ワードWが与えられます。次の行では、テキストTは、空白文字や改行で区切ら与えられます。

「END_OF_TEXTは、」テキストの終わりを示します。

出力

テキストでWの数を出力します。

サンプル入力

コンピュータは、
コンピュータ科学者、高度熟練のコンピューター・エンジニア育む
新時代のための「知識」を作成し、活用します。
優れたコンピュータ環境を提供します。
END_OF_TEXT

サンプル出力

3


効果の対象に

ワードW、およびテキストT.の一部を入力します。私は単語Wが登場回数を、このテキストを、尋ねました。10以上の、Wは小文字であることが保証されていないのWワード長は、これ以上の末尾に「END_OF_TEXT」にテキスト、テキストおよび最終的には1000個の言葉よりも、大文字と小文字を区別しません。

#include <bits/stdc++.h>
using namespace std;
int main(){
    string s1, s2;
    cin >> s1;
    int ans = 0;
    while(cin >> s2){
        if(s2=="END_OF_TEXT")
            break;
        for(int i=0; i<s2.size(); i++) // 转小写
            if(s2[i]>='A' && s2[i]<='Z')
                s2[i] += 'a'-'A';
        if(s1==s2)
            ans ++;
    }
    cout << ans << endl;
    return 0;
}

B:シャッフル

あなたの仕事は、アルファベットでマークされ、それぞれがn個のカードのデッキをシャッフルすることです。

単一シャッフルアクションは、hデッキの下からのカードとデッキの一番上に移動し、それらを取り出します。

次のようにカードのデッキは、文字列で表されます。

abcdeefab
それぞれデッキの下部デッキの上カードに位置カードの最初の文字と最後の文字に対応します。

例えば、上記のデッキに、H = 4のシャッフルは、「eefab」残りの文字の最後に最初の4つの文字「ABCD」に移動し、次のデッキを生成します。

eefababcd
あなたは、このようなシャッフル動作を繰り返すことができます。

デッキ(列)及びHの配列を読み取り、最終状態(文字列)を印刷するプログラムを書きます。

入力

入力は複数のデータセットから構成されています。各データセットは、次の形式で与えられます。

デッキを表す文字列
シャッフルMの数
H1
、H2を


HM
「 - 」文字列の単一文字で入力終了。

制約

ストリング≤200の長さ
1≤M≤100
1≤HI <文字列の長さ
のデータセットの数≤10

出力

各データセットのために、線の最後の状態を表す文字列を印刷します。

サンプル入力

AABC
3
1
2
1
VWXYZ
2
3
4

  • サンプル出力

    AABC
    xyzvw


    効果の対象に

    m回、最後の文字列の出力をシャッフルした後、200を超えていない文字列の長さを入力します。
    いわゆるプライマリーシャッフル:シャッフルする位置には、新しい文字列を形成するために、元の文字列の末尾にすぐに文字列の文字の前にH、Hです。
    「 - 」最後の文字列の数、そして最後にはあります。
    各文字列の長さは200を超えない、各列のシャッフル動作は100を超えない、H法的位置、10以下の数値列。
#include <bits/stdc++.h>
using namespace std;
int main(){
    string s, st;
    while(cin >> s){
        if(s=="-")
            break;
        int m, h;
        int len = s.size();
        cin >> m;
        for(int i=1; i<=m; i++){
            cin >> h;
            s = s.substr(h, len-h) + s.substr(0, h); // 后面 h~len-1的字符串拼接上前面0~h-1的字符串 
        }
        cout << s << endl;
    }
    return 0;
}

C:カードゲーム

太郎と花子は、カードゲームをプレイしています。彼らは、n個のカードそれぞれを持っている、と彼らは、nターンを競います。各ターンで、太郎と花子は、それぞれのカードを出します。アルファベット文字からなる動物の名前は、各カードに書かれた、と辞書順で大きい方はそのターンの勝者となっています。勝者は3ポイントを獲得します。引き分けの場合には、それらは1点それぞれを得ます。

カード太郎と花子は持っているのシーケンスを読み取り、ゲームの最終スコアを報告するプログラムを書きます。

入力

最初の行では、カードの数Nが与えられます。次のn行では、n個のターンのためのカードがそれぞれ与えられています。各ラインについて、最初の文字列は太郎のカードを表し、もう一つは花子のカードを表します。

制約

N≤千
列≤100の長さ

出力

それぞれ太郎と花子の最終スコアを印刷します。それらの間の単一の空白文字を入れてください。

サンプル入力

3
猫の犬の
魚魚の
ライオンの虎

サンプル出力

1 7


効果の対象に

太郎と花子、それぞれ、カード、動物の大きさよりもカード、英語で書かれた動物を取り出し、辞書式の大きな言葉の勝利の規定。勝者は3ポイント、敗者ノーポイント、双方が1ポイントを持って描画を取得します。n個の比較の合計では、どのくらいの最終的なスコアをお願いします。ここで、n <= 1000、ワード長は、100を超えません。

#include <bits/stdc++.h>
using namespace std;
int main(){
    string s1, s2;
    int n, c1, c2;
    cin >> n;
    c1 = c2 = 0;  //初始化得分 
    for(int i=1; i<=n; i++){
        cin >> s1 >> s2;
        if(s1>s2)
            c1 += 3;
        if(s1==s2)
            c1++, c2++;
        if(s1<s2)
            c2 += 3;
    }
    cout << c1 << " " << c2 << endl;
    return 0;
}

D:変容

与えられた文字列strに一連のコマンドを実行するプログラムを書きます。コマンドは、次のいずれかです。

ABを印刷:STRのb番目の文字に、A番目の文字から印刷
逆AB:STRのb番目の文字に、A番目の文字から逆
ABP置き換える:B-に、A番目の文字から置き換えますpでSTRの番目の文字

STRのインデックスは0で始まることに注意してください。

入力

最初の行では、文字列strが与えられます。strが小文字で構成されています。2行目で、コマンドqの数が与えられます。次Q株において、各コマンドは、上述の形式で与えられます。

出力

各印刷コマンドの場合は、行の文字列を印刷します。

制約

1≤str≤1000の長さ
1≤q≤100
STRの0≤a≤b<長さ
Pのコマンドを置き換える、B-+ 1 =長さは

サンプル入力1

ABCDE
3
1〜3は、XYZ置き換える
逆0~2
プリント1 4

サンプル出力1

外部の

サンプル入力2

XYZ
3
印刷0 2
0 2 ABCの置き換え
プリント0 2

サンプル出力2

XYZ
ABC


効果の対象に

文字列str与えられ、3は操作で行うことができる(0から開始位置カウント)列:印刷間隔〜B、反転部〜bは、弦部〜B pがあります置き換え。総運用Q、1 <= Q <= 100。文字列の操作が正当なもの。

#include <bits/stdc++.h>
using namespace std;
int main(){
    string op, s, p;
    int q, a, b;
    cin >> s;
    cin >> q;
    for(int i=1; i<=q; i++){
        cin >> op >> a >> b;
        if(op=="replace"){
            cin >> p;
            s.replace(a, b-a+1, p);   // replace(起始位置,长度,替换字符串) 
        }
        if(op=="reverse"){
            for(int j=a; j<=(a+b)/2; j++)  // 反转 
                swap(s[j], s[a+b-j]);
        }
        if(op=="print"){
            for(int j=a; j<=b; j++)
                cout << s[j];
            cout << endl;
        }
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/gdgzliu/p/11891048.html