Click here to Skip to main content
15,881,172 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Before I roll my own....is there a built-in way in C++ to generate an alphabetical string sequence?

I mean, as an identifier, numerically you might format a string "_001", "_002", "003", etc.

Is there an easy way to generate e.g., "_AAA", "_AAB", "_AAC" etc.?

Cheers,

Dan

What I have tried:

Nothing yet, and it probably won't be too difficult with some ASCII codes and a bit of maths, but I thought I'd ask before I re-invent any wheels.
Posted
Updated 18-May-21 13:17pm

This should put "_AAA" through "_ZZZ" into a vector. I haven't tested it, so it might have a bug!
C++
std::string s("_   ");
std::vector<std::string> ids;

for(char c1 = 'A'; c1 <= 'Z'; ++c1)
{
   s[1] = c1;

   for(char c2 = 'A'; c2 <= 'Z'; ++c2)
   {
      s[2] = c2;

      for(char c3 = 'A'; c3 <= 'Z'; ++c3)
      {
         s[3] = c3;
         ids.push_back(s);
      }
   }
}
Is that what you're looking for?
 
Share this answer
 
v5
Comments
Kyudos 18-May-21 18:57pm    
I was wondering if there was some secret formatting trick I didn't know about, but this will certainly do the business.
Greg Utas 18-May-21 18:59pm    
I did test get a chance to test it, so make sure you have the right version! :)

There are probably fancier ways to do it, but I prefer straightforward code.

EDIT: You could also increment s[1], s[2], and s[3], and get rid of c1, c2, and c3.
There are several ways other ways to do this but one I like and use a lot involves counting in a different base. It's one way to approach permutations and combinations. In your case, you have 3 digits and each can have 26 values (right?). This means count in base 26, just as you would in decimal or hex. This way can take a lot of memory but not in this case. This will give a table of values (I use a vector to hold arbitrary values) and then you can map each digit's value to a character. Zero becomes 'A', one becomes 'B', and so on. Mathematically, it's character = 'A' + value;

You can do all kinds of combinations and permutations using this technique. For example, you can "deal" a deck of cards. That's a little trickier but not much. For a hand of five cards, each "digit" would have a value of between 0 and 51 and, since it's a deck of cards, no two values can be the same in one hand. That's the difference between combinations and permutations. A hand of cards is a combination and your case is a permutation. The way to think of a hand of cards is it is a deck of 52 combined in sets of 5.
 
Share this answer
 
v2
Comments
Kyudos 18-May-21 22:04pm    
Thanks - my initial thoughts were along the lines of some mod 26 maths :)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900