char NameManager::chooseNextLetter(const char lastLetter, const char letterBeforeLast) { if (letterBeforeLast == ' ' && lastLetter == ' ') return 97 + System::random(25); StringBuffer last; last << Character::toLowerCase(lastLetter); String inclusion = "abcdefghijklmnopqrstuvwxyz"; if (letterBeforeLast != ' ' && (!isVowel(lastLetter) && !isVowel(letterBeforeLast))) { inclusion = letterMappings.get("doubleconsonent"); } else if ((letterBeforeLast != ' ' && isVowel(lastLetter) && isVowel(letterBeforeLast))) { inclusion = letterMappings.get("doublevowel"); } else if ((letterBeforeLast != ' ' && lastLetter == 'u' && letterBeforeLast == 'q')) { inclusion = letterMappings.get("qu"); } else if(letterMappings.contains(last.toString())) { inclusion = letterMappings.get(last.toString()); } return chooseLetterInclusive(inclusion); }
String FrenchStemmer::retrieveRV(const String& buffer) { int32_t len = (int32_t)buffer.length(); if (buffer.length() > 3) { if (isVowel(buffer[0]) && isVowel(buffer[1])) return buffer.substr(3); else { int32_t pos = 0; for (int32_t c = 1; c < len; ++c) { if (isVowel(buffer[c])) { pos = c; break; } } if (pos + 1 < len) return buffer.substr(pos + 1); else return L""; } } else return L""; }
String BrazilianStemmer::getR1(const String& value) { if (value.empty()) return L""; // find 1st vowel int32_t i = (int32_t)(value.length() - 1); int32_t j = 0; for (; j < i; ++j) { if (isVowel(value[j])) break; } if (j >= i) return L""; // find 1st non-vowel for (; j < i; ++j) { if (!isVowel(value[j])) break; } if (j >= i) return L""; return value.substr(j + 1); }
String FrenchStemmer::retrieveR(const String& buffer) { int32_t len = (int32_t)buffer.length(); int32_t pos = -1; for (int32_t c = 0; c < len; ++c) { if (isVowel(buffer[c])) { pos = c; break; } } if (pos > -1) { int32_t consonne = -1; for (int32_t c = pos; c < len; ++c) { if (!isVowel(buffer[c])) { consonne = c; break; } } if (consonne > -1 && (consonne + 1) < len) return buffer.substr(consonne + 1); else return L""; } else return L""; }
void RussianStemmer::markPositions(const String& word) { RV = 0; R1 = 0; R2 = 0; int32_t i = 0; // find RV while ((int32_t)word.length() > i && !isVowel(word[i])) ++i; if ((int32_t)word.length() - 1 < ++i) return; // RV zone is empty RV = i; // find R1 while ((int32_t)word.length() > i && isVowel(word[i])) ++i; if ((int32_t)word.length() - 1 < ++i) return; // R1 zone is empty R1 = i; // find R2 while ((int32_t)word.length() > i && !isVowel(word[i])) ++i; if ((int32_t)word.length() - 1 < ++i) return; // R2 zone is empty while ((int32_t)word.length() > i && isVowel(word[i])) ++i; if ((int32_t)word.length() - 1 < ++i) return; // R2 zone is empty R2 = i; }
char* en_en::getVerbPreAdd(int v){ FILE* rFile=fopen(DICTIONARY EN_EN_FOLDER "verb_present","r"); gotoline(rFile,v); char* buffer=(char*)malloc(BUFFER_SIZE); fgets(buffer,BUFFER_SIZE-1,rFile); fclose(rFile); char t=buffer[0]; if (t=='1'){ //Look up second word form int u=0,i=0; while (u<2){ if (buffer[i]=='_') u++; else if (buffer[i]==0) break; else if (buffer[i]=='\n') break; i++; } u=0; while (buffer[i]!='_' && buffer[i]!=0 && buffer[i]!='\n') buffer[u++]=buffer[i++]; buffer[u++]=0; }else if (t=='0'){ char* b=getVerb(v,10,0,1,&blank); int i=0; while (b[i]!=0) i++; //[(space)] [\0] //We are removing the space here, because it is added in getVerb because the function thinks we will just add it straight to the sentence. b[i-1]=0; return b; }else{ int i=0; while(buffer[i]!='_' && buffer[i]!=0 && buffer[i]!='\n') i++; i++; int u=0; while (buffer[i]!='_' && buffer[i]!=0 && buffer[i]!='\n') buffer[u++]=buffer[i++]; //Now follow all the english rules //http://www.oxforddictionaries.com/words/verb-tenses-adding-ed-and-ing //http://www.grammar.cl/Notes/Spelling_ING.htm if (buffer[u-1]=='e' && buffer[u-2]=='i'){ u-=2; buffer[u++]='y'; } else if (buffer[u-1]=='e' && (buffer[u-2]!='e' && buffer[u-2]!='y' && buffer[u-2]!='o')) u-=1; else if (buffer[u-1]=='c'){ buffer[u++]='k'; } else if (!isVowel(buffer[u-3])&&isVowel(buffer[u-2])&&!isVowel(buffer[u-1])&&buffer[u-1]!='x'&&buffer[u-1]!='y'&&buffer[u-1]!='z'&&buffer[u-1]!='w'){ buffer[u]=buffer[u-1]; u++; } buffer[u++]=0; } return buffer; }
inline void syllabize( std::vector<std::string>& mTarget, const std::string& mWord) { auto itr(std::begin(mWord)); auto itrEnd(std::end(mWord)); auto valid([&itr, &itrEnd]() -> bool { return itr != itrEnd; }); while(valid()) { std::string currentSyllable; // CASE: beginning VC if(valid() && itr == std::begin(mWord) && isVowel(*itr) && isConsonant(*(itr + 1))) { currentSyllable += *itr++; mTarget.emplace_back(currentSyllable); continue; } // CASE: C...V if(valid() && isConsonant(*itr)) { while(valid() && isConsonant(*itr)) { currentSyllable += *itr++; if(valid() && isVowel(*itr)) { currentSyllable += *itr++; if(valid() && isConsonant(*itr)) { char lastConsonant(*itr); if(itr + 1 < itrEnd && *itr == lastConsonant && *(itr + 1) == lastConsonant) { currentSyllable += *itr++; } } break; } } } // CASE: V else if(valid() && isVowel(*itr)) { currentSyllable += *itr++; } mTarget.emplace_back(currentSyllable); } }
string reverseVowels(string s) { int i = 0, j = s.size() - 1; while (i < j) { while (i < j && !isVowel(s[i])) ++i; while (i < j && !isVowel(s[j])) --j; if (i < j) swap(s[i++], s[j--]); } return s; }
int isIntervocalical(unsigned short string[], int size, int position) { if (position - 1 > 0 && position + 1 < size && ((isVowel(string[position - 1]) && isVowel(string[position + 1])) || (string[position - 1] != 0x0BCD && string[position + 1] != 0x0BCD))) { return 1; } return 0; }
string reverseVowels(string s) { int i = 0, j = s.length()-1; while (i < j) { while (!isVowel(s[i])) ++i; while (!isVowel(s[j])) --j; if (i >= j) break; swap(s[i++], s[j--]); } return s; }
/* Like mgt0 above except we are looking for a value of m>1 instead ** or m>0 */ static int m_gt_1(const char *z){ while( isVowel(z) ){ z++; } if( *z==0 ) return 0; while( isConsonant(z) ){ z++; } if( *z==0 ) return 0; while( isVowel(z) ){ z++; } if( *z==0 ) return 0; while( isConsonant(z) ){ z++; } return *z!=0; }
string reverseVowels(string s) { // a e i o u int lo = 0, hi = s.size() - 1; while (lo < hi){ while (lo < s.size() && !isVowel(s[lo])) lo++; if (lo > hi) break; while (hi >= lo && !isVowel(s[hi])) hi--; swap(s[lo++], s[hi--]); } return s; }
string reverseVowels(string s) { int left = 0, right = s.size() - 1; while(left < right){ while(!isVowel(s[left])) ++left; while(!isVowel(s[right])) --right; if(left < right){ swap(s[left], s[right]); } ++left; --right; } return s; }
string reverseVowels (string s) { if (s.size() <= 1) return s; int i = 0, j = s.size() - 1; while (i < j) { if (isVowel(s[i]) && isVowel(s[j])) swap(s[i++], s[j--]); else { if (!isVowel(s[i])) ++i; if (!isVowel(s[j])) --j; } } return s; }
int32_t DutchStemmer::getRIndex(int32_t start) { if (start == 0) start = 1; int32_t i = start; for (; i < (int32_t)buffer.length(); ++i) { // first non-vowel preceded by a vowel if (!isVowel(buffer[i]) && isVowel(buffer[i - 1])) return i + 1; } return i + 1; }
string reverseVowels(string s) { int lo = -1,hi = s.length(); while(lo<hi){ if(isVowel(s[++lo])){ while(lo<hi&&!isVowel(s[--hi])); s = swapChar(s,lo,hi); } } return s; }
string reverseVowels(string s) { int l = 0, r = s.size() - 1; while (l < r) { while ((l < r) && !isVowel(s[l])) l++; while ((l < r) && !isVowel(s[r])) r--; if (l < r) { swap(s[l], s[r]); l++; r--; } } return s; }
char* reverseVowels(char* s) { int l = 0; int r = strlen(s) - 1; while (l < r) { if (isVowel(s[l]) && isVowel(s[r]) ) { swap(s + l, s + r); l++; r--; } else { if (!isVowel(s[l])) l++; if (!isVowel(s[r])) r--; } } return s; }
/* ** Return TRUE if the word ends with three letters which ** are consonant-vowel-consonent and where the final consonant ** is not 'w', 'x', or 'y'. ** ** The word is reversed here. So we are really checking the ** first three letters and the first one cannot be in [wxy]. */ static int star_oh(const char *z){ return z[0]!=0 && isConsonant(z) && z[0]!='w' && z[0]!='x' && z[0]!='y' && z[1]!=0 && isVowel(z+1) && z[2]!=0 && isConsonant(z+2); }
bool DutchStemmer::isValidSEnding(int32_t index) { wchar_t c = buffer[index]; if (isVowel(c) || c == L'j') return false; return true; }
string toGoatLatin(string S) { string result; int n = S.size(), i = 0, count = 0; while (i < n) { ++count; string word; while (i < n && S[i] != ' ') { word += S[i++]; } if (isVowel(word[0])) { result += word + "ma"; } else { result += word.substr(1) + word.substr(0, 1) + "ma"; } int j = count; while (j--) { result += 'a'; } if (i < n) { result += ' '; } ++i; } return result; }
char* removeVowels(char *sen) { char *temp=sen, *returnVal; int count = 0; if (sen == NULL) return NULL; //find size of sen including \0 while (temp[count++] != '\0'); //alloc memory returnVal = (char*)malloc(count*sizeof(char)); //again RESET TEMP, COUNT temp = sen;count =0; while (temp[0] != '\0') { if (!isVowel(temp[0])) returnVal[count++] = temp[0]; temp++; } returnVal[count]='\0'; return returnVal; }
int nOfVowel(char * buffer, size_t stringLength) { if(stringLength==0) return 0; else return isVowel(*buffer) + nOfVowel(buffer + 1, stringLength - 1); }
main() { //get user input string printf("Please enter a word to be turned to pig latin\n"); char str[100]; gets(str); char first = str[0]; //perform the string manipulation to make pig latin if (isVowel(first)==0) { char tmp[4]; tmp[0] = first; tmp[1] = 'a'; tmp[2] = 'y'; tmp[3] = '\0'; strcat(str, tmp); memmove(str, str + 1, strlen(str)); printf("%s\n", str); } else { strcat(str, "yay"); printf("%s\n", str); } //stall indefinitely to show the result while (1 == 1) { } }
bool FrenchStemmer::deleteFromIfTestVowelBeforeIn(const String& source, Collection<String> search, bool vowel, const String& from) { bool found = false; if (!source.empty() && !from.empty()) { for (int32_t i = 0; i < search.size(); ++i) { if (boost::ends_with(source, search[i])) { if ((search[i].length() + 1) <= from.length()) { bool test = isVowel(stringBuffer[stringBuffer.length() - (search[i].length() + 1)]); if (test == vowel) { stringBuffer.resize(stringBuffer.length() - search[i].length()); modified = true; found = true; setStrings(); break; } } } } } return found; }
void FrenchStemmer::step6() { if (!R0.empty()) { bool seenVowel = false; bool seenConson = false; int32_t pos = -1; for (int32_t i = (int32_t)(R0.length() - 1); i > -1; --i) { wchar_t ch = R0[i]; if (isVowel(ch)) { if (!seenVowel) { if (ch == L'\x00e9' || ch == L'\x00e8') { pos = i; break; } } seenVowel = true; } else { if (seenVowel) break; else seenConson = true; } } if (pos > -1 && seenConson && !seenVowel) stringBuffer[pos] = L'e'; } }
string reverseVowels(string s) { if(s.size() < 2) return s; std::deque<char> stack; for(int i = 0; i < s.size(); i++){ if(isVowel(s[i])) stack.push_back(s[i]); } for(int i = 0; i < s.size(); i++){ if(isVowel(s[i])){ s[i] = stack.back(); stack.pop_back(); } } return s; }
const String NameManager::makeResourceName(bool isOrganic) { int nameLength = 4 + System::random(6); String name; do { name = ""; if (nameLength > 5 && System::random(2) == 1) { addPrefix(name, isOrganic); } if(name.length() < 2) { name += chooseNextLetter(' ', ' '); name += chooseNextLetter(name[0], ' '); } assert(name.length() != 0); while (name.length() < nameLength) name += chooseNextLetter(name[name.length() - 1], name[name.length() - 2]); if (!isVowel(name[name.length() - 1]) && name[name.length() - 1] != 'q' && System::random(1) == 1 ) addSuffix(name, isOrganic); name[0] = Character::toUpperCase(name[0]); } while (validateName(name, -1) != NameManagerResult::ACCEPTED); return name; }
void DutchStemmer::step4() { if (buffer.length() < 4) return; String end(buffer.substr(buffer.length() - 4)); if (end[1] == end[2] && end[3] != L'I' && end[1] != L'i' && isVowel(end[1]) && !isVowel(end[3]) && !isVowel(end[0])) buffer.erase(buffer.length() - 2, 1); }
static int isConsonant(const char *z){ int j; char x = *z; if( x==0 ) return 0; assert( x>='a' && x<='z' ); j = cType[x-'a']; if( j<2 ) return j; return z[1]==0 || isVowel(z + 1); }