# Alphanumeric Abbreviations of a String in C Program?

Here we will see one interesting problem related to alphanumeric abbreviation of a given string. The string length is less than 10. We will print all alphanumeric abbreviations.

The alphanumeric abbreviation is in the form of characters mixed with the digits. The value of that digit is number of characters that are missed. There may be any number of skipped substrings. No two substrings are adjacent to each other. Let us see the algorithm to get the idea.

## Algorithm

printAbbreviation(s, index, max, str) −

begin
if index is same as max, then
print str
end if
add s[index] at the last of str
printAbbreviation(s, index + 1, max, str)
delete last character from str
count := 1
if str is not empty, then
if the last character of str is a digit, then
add last digit with the count value
delete last character from str
end if
end if
printAbbreveation(s, index + 1, max, str)
end

## Example

#include <iostream>
using namespace std;
void printAbbreviation(const string& s, int index, int max_index, string str) {
if (index == max_index) { //if string has ended
cout << str << endl;
return;
}
str.push_back(s[index]); // push the current character to result
printAbbreviation(s, index + 1, max_index, str); //print from next index
str.pop_back(); //remove last character
int count = 1;
if (!str.empty()) {
if (isdigit(str.back())) { //if the last one is digit, then
count += (int)(str.back() - '0'); //count the integer value of that digit
str.pop_back(); //remove last character
}
}
char to_char = (char)(count + '0'); //make count to character
str.push_back(to_char);
printAbbreviation(s, index + 1, max_index, str); //do for next index
}
void printCombination(string str) {
if (!str.length()) //if the string is empty
return;
string str_res;
printAbbreviation(str, 0, str.length(), str_res);
}
int main() {
string str = "HELLO";
printCombination(str);
}

## Output

HELLO
HELL1
HEL1O
HEL2
HE1LO
HE1L1
HE2O
HE3
H1LLO
H1LL1
H1L1O
H1L2
H2LO
H2L1
H3O
H4
1ELLO
1ELL1
1EL1O
1EL2
1E1LO
1E1L1
1E2O
1E3
2LLO
2LL1
2L1O
2L2
3LO
3L1
4O
5