Codechef Probem : NITIKA
Problem : Link: ( https://www.codechef.com/JULY17/problems/NITIKA )
Nitika
was once reading a history book and wanted to analyze it. So she asked
her brother to create a list of names of the various famous
personalities in the book. Her brother gave Nitika the list. Nitika was
furious when she saw the list. The names of the people were not properly
formatted. She doesn’t like this and would like to properly format
it.
A name can
have at most three parts: first name, middle name and last name. It will
have at least one part. The last name is always present. The rules of
formatting a name are very simple:
- Only the first letter of each part of the name should be capital.
- All the parts of the name except the last part should be represented by only two characters. The first character should be the first letter of the part and should be capitalized. The second character should be “.”.
- gandhi -> Gandhi
- mahatma gandhI -> M. Gandhi
- Mohndas KaramChand ganDhi -> M. K. Gandhi.
Input :
The
first line of the input contains an integer T denoting the number of
test cases.
The only
line of each test case contains the space separated parts of the
name.
Output :
For each case, output the properly formatted name.
Constraint :
- 1 ≤ T ≤ 100
- 2 ≤ Length of each part of the name ≤ 10
- Each part of the name contains the letters from lower and upper case English alphabets (i.e. from ‘a’ to ‘z’, or ‘A’ to ‘Z’)
Subtask :
Subtask #1 (40 points)
- There is exactly one part in the name.
Example :
Input:
3
gandhi
mahatma gandhI
Mohndas KaramChand gandhi
Output:
Gandhi
M. Gandhi
M. K. Gandhi
Solution (in C++) :
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
int t;
cin >> t;
cin.ignore();
while (t--) {
string s;
getline(cin, s);
int x = 0;
for (int i = 0; i < s.length(); i++) {
if (s[i] == ' ') {
s[x] = toupper(s[x]);
x++;
s[x] = '.';
x++;
while (s[x] != ' ') {
s.erase(x, 1);
}
i = x;
x++;
}
}
s[x] = toupper(s[x]);
x++;
for (int k = x; k < s.length(); k++) {
s[k] = tolower(s[k]);
}
cout << s << endl;
}
return 0;
}