Friday, January 30, 2009

UVa problem 10260: sample algorithm sample code

To solve UVa problem 10260 (Soundex), one could use a map to map characters to their integer values.


001 #include "stdio.h"
002 #include "map"
003
004 using namespace std;
005
006 int main() {
007 char line[100], ctmp[100], dtmp[100];
008
009 int i, j, prev, len, arr[20];
010
011 map m;
012 map::iterator mi;
013
014 m['B'] = 1;
015 m['F'] = 1;
016 m['P'] = 1;
017 m['V'] = 1;
018
019 m['C'] = 2;
020 m['G'] = 2;
021 m['J'] = 2;
022 m['K'] = 2;
023 m['Q'] = 2;
024 m['S'] = 2;
025 m['X'] = 2;
026 m['Z'] = 2;
027
028 m['D'] = 3;
029 m['T'] = 3;
030
031 m['L'] = 4;
032
033 m['M'] = 5;
034 m['N'] = 5;
035
036 m['R'] = 6;
037
038 while (fgets(line, 100, stdin)) {
039 for (i = 0, j = 0, prev = 0, len = 0; line[i] != 0; i++) {
040 mi = m.find(line[i]);
041
042 if (mi != m.end()) {
043 j = (*mi).second;
044
045 if (j == prev) {
046 continue;
047 }
048
049 arr[len] = j;
050 len++;
051 prev = j;
052 }
053 else {
054 prev = 0;
055 }
056 }
057
058 for (i = 0; i < len; i++) {
059 printf("%d", arr[i]);
060 }
061 printf("\n", ctmp);
062 }
063
064 return 0;
065 }

No comments:

Post a Comment