« テキサスホールデムの役を判定する | トップページ | 続・C言語で要素を数える »

2014年11月29日 (土)

C言語で要素を数える

プログラム技術板スレ立てるまでもない質問はここで 139匹目において、C言語で要素を数えたいという話題があった。

文字列を引数とするハッシュを使いたいので、はっきりいってC言語で実装したくない。でも頑張って書いてみた。

// total.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"

int _tmain(int argc, char* argv[])
{
	char label[50][5];
	int count[50];
	int last_index = 0;

	if (argc != 4)
	{
		fprintf( stderr, "Usage: %s inputfile1 inputfile2 outputfile\n", argv[0]);
		exit(-1);
	}

	for (int file_index = 1; file_index <= 2; file_index++)
	{
		FILE* fp = fopen(argv[file_index], "r");
		if (fp == NULL)
		{
			fprintf( stderr, "Cannot open input file %s\n", argv[file_index]);
			exit(-2);
		}

		char read_label[5];
		int read_count;
		while (fscanf(fp, "%s %d", read_label, &read_count)!=EOF)
		{
			for (int i = 0; i < last_index; i++)
			{
				if (strcmp(read_label, label[i]) == 0)
				{
					count[i] += read_count;
					goto next_loop;
				}
			}
			strcpy(label[last_index], read_label);
			count[last_index] = read_count;
			last_index++;
		next_loop:
			;
		}
		fclose(fp);
	}

	FILE* fp = fopen(argv[3], "w");
	if (fp == NULL)
	{
		fprintf(stderr, "Cannot open file %s\n", argv[3]);
		exit(-3);
	}
	for (int i = 0; i < last_index; i++)
		fprintf(fp, "%s %d\n", label[i], count[i]);

	fclose(fp);

	return 0;
}
入力ファイル1
0001 3
0002 11
0003 6
入力ファイル2
0003 2
0004 8
出力ファイル
0001 3
0002 11
0003 8
0004 8

« テキサスホールデムの役を判定する | トップページ | 続・C言語で要素を数える »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1499066/58128596

この記事へのトラックバック一覧です: C言語で要素を数える:

« テキサスホールデムの役を判定する | トップページ | 続・C言語で要素を数える »