開発環境
- OS X Mavericks - Apple, ときどき
Windows 8.1 + Cygwin64, MinGW (OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- C++ (プログラミング言語)
- g++(コンパイラ)
C++実践プログラミング (スティーブ オウアルライン (著)、Steve Oualline (原著)、Steve Oualline(原著)、望月 康司(翻訳)、クイープ(翻訳) 、オライリー・ジャパン)のⅤ部(言語のその他の機能)の25章(STL(Standard Template Library))、25.8(プログラミング実習)、実習 25-4.を解いてみる。
その他参考書籍
- C++プログラミング入門 (グレゴリー サティア (著)、ダウグ ブラウン (著)、Gregory Satir (原著)、Doug Brown (原著)、望月 康司 (翻訳)、谷口 功 (翻訳)、オライリージャパン)
実習 25-4.
コード(BBEdit, Emacs)
count_words.cpp
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
#include <cstdlib>
#include <set>
#include <map>
static std::map<std::string, int> word_counts;
static std::set<std::string> words;
static void p(std::string word)
{
std::map<std::string, int>::const_iterator word_loc;
word_loc = word_counts.find(word);
std::cout << std::setiosflags(std::ios::left) << std::setw(50) << word;
std::cout << std::resetiosflags(std::ios::left);
std::cout << std::setiosflags(std::ios::right) << std::setw(4) <<
word_loc->second << '\n';
std::cout << std::resetiosflags(std::ios::right);
}
int main(int argc, char *argv[])
{
std::string word;
int count;
std::ifstream in_file;
std::map<std::string, int>::const_iterator word_loc;
if (argc != 2) {
std::cerr << "Usage: <filename>\n";
exit (8);
}
in_file.open(argv[1]);
if (in_file.fail()) {
std::cerr << "Unable to open " << argv[1] << '\n';
exit (8);
}
while (!in_file.eof()) {
in_file >> word;
word_loc = word_counts.find(word);
if (word_loc == word_counts.end()) {
words.insert(word);
word_counts.insert(std::pair<std::string, int>(word, 1));
}
else {
count = word_loc->second + 1;
word_counts.erase(word);
word_counts.insert(std::pair<std::string, int>(word, count));
}
}
std::for_each(words.begin(), words.end(), p);
return (0);
}
Makefile
CC=g++
CFLAGS=-g -Wall
SRC=count_words.cpp
OBJ=count_words.o
all: count_words
count_words: $(OBJ)
${CC} ${CFLAGS} -o count_words $(OBJ)
count_words.o: count_words.cpp
${CC} $(CFLAGS) -c count_words.cpp
clean:
rm count_words count_words.o
入出力結果(Terminal)
$ make
g++ -g -Wall -c count_words.cpp
g++ -g -Wall -o count_words count_words.o
$ ./count_words count_words.cpp
!= 1
" 1
"Unable 1
"Usage: 1
#include 7
'\n'; 2
(!in_file.eof()) 1
(0); 1
(8); 2
(argc 1
(in_file.fail()) 1
(word_loc 1
*argv[]) 1
+ 1
1)); 1
1; 1
2) 1
<< 13
<cstdlib> 1
<filename>\n"; 1
<fstream> 1
<iomanip> 1
<iostream> 1
<map> 1
<set> 1
<string> 1
= 3
== 1
>> 1
argc, 1
argv[1] 1
char 1
count 1
count)); 1
count; 1
else 1
exit 2
if 3
in_file 1
in_file.open(argv[1]); 1
in_file; 1
int 2
int> 1
int>(word, 2
int>::const_iterator 2
main(int 1
open 1
p(std::string 1
p); 1
return 1
static 3
std::cerr 2
std::cout 4
std::for_each(words.begin(), 1
std::ifstream 1
std::map<std::string, 3
std::resetiosflags(std::ios::left); 1
std::resetiosflags(std::ios::right); 1
std::set<std::string> 1
std::setiosflags(std::ios::left) 1
std::setiosflags(std::ios::right) 1
std::setw(4) 1
std::setw(50) 1
std::string 1
to 1
void 1
while 1
word) 1
word; 3
word_counts.end()) 1
word_counts.erase(word); 1
word_counts.find(word); 2
word_counts.insert(std::pair<std::string, 2
word_counts; 1
word_loc 2
word_loc->second 2
word_loc; 2
words.end(), 1
words.insert(word); 1
words; 1
{ 7
} 8
$
0 コメント:
コメントを投稿