4

このプログラムは、標準入力ストリームに与えられた各単語を保存し、それらの出現回数をカウントすることになっています。結果は、その後に順番に出力され、その後にカウントが続くはずです。私が知る限り、プログラムは別の方法で動作していますが、文字列は文字自体ではなく文字の ASCII 値として出力されます。どうしたの?

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <cctype>
#include <algorithm>

std::string get_word();

int main()
{
    std::vector<std::string> words;
    std::string word;

    while (std::cin.good()) {
        word = get_word();

        if (word.size() > 0)
            words.push_back(word);
    }

    std::sort(words.begin(), words.end());

    unsigned n, i = 0;

    while (i < words.size()) {
        word = words[i];
        n = 1;

        while (++i < words.size() and words[i] == word)
            ++n;

        std::cout << word << ' ' << n << std::endl;
    }
}


std::string get_word()
{
    while (std::cin.good() and !std::isalpha(std::cin.peek()))
        std::cin.get();

    std::stringstream builder;

    while (std::cin.good() and std::isalpha(std::cin.peek()))
        builder << std::cin.get();

    return builder.str();
}
4

1 に答える 1

6

std::istream::get()charbut std::ios::int_type(および EOF のすべての値を保持できる整数型の typedef) を返さず、char_typeそれを stringstream に挿入します。結果を にキャストする必要がありcharます。

std::basic_istream::get

于 2012-09-20T07:19:37.113 に答える