1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
vector <string> buildPoss(string word)
{
vector<string> poss;
string alph="abcdefghijklmnopqrstuvwxyz";
char punct[]={'.','?','!','&','(',')','-','\'','"'};
string hasPunct[]={"","","","","","","","","","",""};
int punctPos[]={0,0,0,0,0,0,0,0,0,0,0};
int k=0,possCount=0,punctCount=0;
string test,temp;
char delim='~';
// Load original word into first element
poss[possCount]= word;
possCount++;
// Scan word for punctuation
for (int i = 0; i < word.length(); i++)
{
for (int j = 0; j < 9; j++)
{
if (word[i] == punct[j])
{
// Save puntcuation found into array
hasPunct[k]=punct[j];
punctPos[k]=i;
punctCount=k;
k++;
// Replace punctuation for ~
word.replace(i, 1,&delim);
}
}
}
// Build A poss (Add one character)
for (int i = 0; i < word.length(); i++)
{
if (word[i] == delim)
{
i++;
}
if (i%2==0)
{
for (int j = 0; j < alph.length(); j++)
{
test[i]=alph[j];
temp=word.substr(i+1,word.length());
test+=temp;
temp.clear();
if (punctCount!=0)
{
for (int i = 0; i < punctCount; i++)
{
if (test[i]==delim)
{
test.insert(i, hasPunct[k]);
k++;
}
}
}
poss[possCount]=test;
possCount++;
test.clear();
}
}else
{
temp=word.substr(0,i);
test=temp;
}
}
// Build B poss (Remove one character)
for (int i = 0; i < word.length(); i++)
{
if (word[i]==delim)
{
i++;
}else
{
temp=word.substr(0,i);
test=temp;
test+=word.substr(i+1);
if (punctCount!=0)
{
for (int i = 0; i < punctCount; i++)
{
if (test[i]==delim)
{
test.insert(i, hasPunct[k]);
k++;
}
}
}
poss[possCount]=test;
possCount++;
}
}
// Build C poss (Exchange adjacent characters)
for (int i = 0; i < word.length(); i++)
{
if(i ==0)
{
test[i]=word[i+1];
test[i+1]=word[i];
test+=word.substr(i+2);
}else
{
test=word.substr(i-1,i+1);
test[i]=word[i+1];
test[i+1]=word[i];
test+=word.substr(i+2);
}
if (punctCount!=0)
{
for (int i = 0; i < punctCount; i++)
{
if (test[i]==delim)
{
test.insert(i, hasPunct[k]);
k++;
}
}
}
poss[possCount]=test;
possCount++;
}
return poss;
}
|