スポンサーリンク

文字列をソート・ユニークする関数を実装

第一引数のstrの文字列をソート・ユニークして、第二引数のoutStrに入力する

void sortUniqStr(char* str, char* outStr){
	int hash[SIZE] = {0};
	int i,j;
	int len = strlen(str);

	for(i = 0; i < len ; i++){
		hash[ str[i] ]++;	
	}
	for(i = 0, j = 0; i < SIZE ; i++){
		if(hash[i] != 0){
			outStr[j] = i;
			j++;
		}
	}
	outStr[j] = '\0';
	
	return;
}

ハッシュを使って、出現してきた文字列をカウントします。

	for(i = 0; i < len ; i++){
		hash[ str[i] ]++;	
	}

その後、先頭の文字から、カウントが1以上の文字列を出力していきます。
最後に、NULL文字を入れるのを忘れないことが大事です。

	for(i = 0, j = 0; i < SIZE ; i++){
		if(hash[i] != 0){
			outStr[j] = i;
			j++;
		}
	}
	outStr[j] = '\0';

スポンサーリンク

サンプルコード

下記がサンプルコードになります。

$ cat sample.c 
#include <stdio.h>
#include <string.h>

#define SIZE 256
void sortUniqStr(char* str, char* outStr){
	int hash[SIZE] = {0};
	int i,j;
	int len = strlen(str);

	for(i = 0; i < len ; i++){
		hash[ str[i] ]++;	
	}
	for(i = 0, j = 0; i < SIZE ; i++){
		if(hash[i] != 0){
			outStr[j] = i;
			j++;
		}
	}
	outStr[j] = '\0';
	
	return;
}

int main(){
	char* str = "abbcdeac";
	char outStr[SIZE] = {0};
	
	sortUniqStr(str, outStr);
	printf("%s", outStr);

	return 0;
}

下記が実行結果になります。
$ gcc -o sample sample.c
$ ./sample 
abcde

スポンサーリンク