So I'm creating a program which translate any word into "Malang slang". It's basically just a reversal of the letters in a word except for "ng".
Everything to plan, except when I encounter this problem. When I input a word with length of nine or ten, the program shows additional characters to the screen:
1. Translate to/from Malang slang
2. Exit
Choose your option: 1
Insert your sentence/word here: tenletters
Malang slang: srettelnet╨o
Malang Slang Translator
1. Translate to/from Malang slang
2. Exit
Choose your option: 1
Insert your sentence/word here: nineletter
Malang slang: rettelenin╨o
//How it should be:
Malang Slang Translator
1. Translate to/from Malang slang
2. Exit
Choose your option: 1
Insert your sentence/word here: tenletters nineletter
Malang slang: srettelnet rettelenin
The code that I use is this:
#include <iostream>
#include <string.h>
#include <sstream>
using namespace std;
void ignoreLine() //ignore line
{
cin.clear();
cin.ignore(100, '\n');
}
void clearArray(string word, char* reversed_word) //function to clear char array
{
for(int i = 0; i < sizeof(reversed_word)+1; i++)
reversed_word[i] = NULL;
}
void swapChar(char* char1, char* char2) //Swaps char
{
char temp = *char1;
*char1 = *char2;
*char2 = temp;
}
void reverseWord(string word, char* reversed_word) //function to reverse words [used inside tokenizer]
{
clearArray(word, reversed_word);
for(int i = 0, j = word.size() - 1; i < word.size(); i++, j--)
reversed_word[j] = word[i];
for(int i = 0; i < word.size() - 1; i++)
{
if((reversed_word[i+1] == 'n' || reversed_word[i+1] == 'N') && (reversed_word[i] == 'g' || reversed_word[i] == 'G'))
swapChar(&reversed_word[i], &reversed_word[i+1]);
}
}
void tokenizer(string sentence, char* reversed_word) //function to tokenize/separate strings per spaces
{ //using stringstream
stringstream ss(sentence);
string word;
cout << "Malang slang: ";
while(ss >> word)
{
reverseWord(word, reversed_word);
cout << reversed_word << ' ';
}
cout << endl << endl;
}
void translateMalang()
{
string sentence;
fflush(stdin); //Clears buffer
cout << "\nInsert your sentence/word here: ";
getline(cin, sentence);
if(sentence.empty()) //If no input, return to main menu
{
cout << "No words inputted." << endl;
return;
}
char reversed_word[sentence.size()]; //declare reversed_word variable as char array
tokenizer(sentence, reversed_word); //execute tokenizer function
}
void mainMenu(bool* finished)
{
int option = 0;
cout << "Malang Slang Translator\n1. Translate to/from Malang slang\n2. Exit\nChoose your option: ";
cin >> option;
switch(option)
{
case 1:
translateMalang();
break;
case 2:
*finished = 1;
break;
default:
cout << "Invalid input!" << endl << endl;
break;
}
}
int main()
{
bool finished = 0;
while(!finished)
{
while(cin.fail())
{
ignoreLine();
cout << "Please enter an integer!" << endl;
}
mainMenu(&finished);
}
return 0;
}
Does anyone know why this happens and what's the solution for this? Thanks!