|
The way I'd approach it is like this:
1. Define functions that return random voewls and random consonants - here's a random vowel function:
char RandomVowel()
{
const char vowels[] = {'a', 'e', 'i', 'o', 'u'};
const int index = (int)((double)rand()/(RAND_MAX+1) * sizeof(vowels));
return vowels[index];
}
2. Build up a string using alternating calls to the random vowel and consonant functions - note that I've remembered about the upper case first character!
std::string name;
name += (char)toupper(RandomConsonant());
for(int i=1;i<desired-name-length;++i)
{
if (i%2==1)
name += RandomVowel();
else
name += RandomConsonant();
}
Obviously the desired name length should be chosen at random as well!
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Here's my try:
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
string name;
static const int namelen = 15;
static const char* letters[2] = { "bcdfghjklmnpqrstvwxyz", "aeiouy" };
static const letterlen[2] = { strlen(letters[0]), strlen(letters[1]) };
for (int i=0; i<namelen; i++)
name += letters[i%2][rand()%letterlen[i%2]];
name[0] = toupper(name[0]);
return 0;
}
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
I understand somewhat the code you provided, but how can I loop it to make it create say 20 different names and store them and later output them to the display?
|
|
|
|
|
this what i have and it works, but how do i loop it so that i can generate the number of names that the user inputs?
for (int i=0; i<numFirst; i++)
{
firstname += letters[i%2][rand()%letterlength[i%2]];
firstname[0] = toupper(firstname[0]);
}
for (int i=0; i<numLast; i++)
{
lastname += letters[i%2][rand()%letterlength[i%2]];
lastname[0] = toupper(lastname[0]);
}
|
|
|
|
|
Chuck Vought wrote: ...how do i loop it so that i can generate the number of names that the user inputs?
Put those two for() loops inside of another loop.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
wont that just continue to overwrite the last names created? i need to loop them and then be able to store each name in an array to pass to a print function. any idea on how that would look? thanks for the response.
|
|
|
|
|
Chuck Vought wrote: wont that just continue to overwrite the last names created?
Of course. You'd need to turn firstname and lastname into an array of strings.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
How do I create the array fo strings and how would I set the cout statement to read each array? Are array strings treated the same as arrays? can you show me an example of how to create one?
thanks
|
|
|
|
|
Chuck Vought wrote: How do I create the array fo strings...
Option 1:
string firstname[20]; Option 2:
vector<string> firstname;
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
now is firstname[20] the number of character is 20 or is that the number of different names that will be put into the array? i have never done anything with vectors so option 1 looks better.
so when i set my cout statement to display each firstname would firstname[0] be name1, firstname[1] be name 2 , etc.
|
|
|
|
|
Chuck Vought wrote: ...or is that the number of different names that will be put into the array?
Yes.
Chuck Vought wrote: i have never done anything with vectors so option 1 looks better.
But it is limited to 20 .
Chuck Vought wrote: so when i set my cout statement to display each firstname would firstname[0] be name1, firstname[1] be name 2 , etc.
Yes.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
can i change it to 67 as my example shows? to any number i choose?
|
|
|
|
|
Below is what i am trying to do. Does it appear that i am oon the right track anyways.
You can use either a character array or a string to create each first and last name, however, each first and last name must then be stored in an array of names once it has been created. You can use a single array to store both the first and last name, or a single array for each first name and another array for each last name; this is up to you.
Once you have created the array(s) of names, pass it (them) to a function called print_names that prints out 3 names per line to the screen.
example: 67 names with a 5 letter first name and 8 letter last name
|
|
|
|
|
Chuck Vought wrote: Below is what i am trying to do. Does it appear that i am oon the right track anyways.
Assuming your code matches, yes.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
Thanks for the help with this. I will be trying it later after work. I may still have some questions we will see.
|
|
|
|
|
Does this look something that will work to create say 100 names?
int main(int argc, char* argv[])
{
string firstname[100];
static const int namelen = 15;
static const char* letters[2] = { "bcdfghjklmnpqrstvwxyz", "aeiouy" };
static const letterlen[2] = { strlen(letters[0]), strlen(letters[1]) };
for (int j=0; j<100; j++)
{
for (int i=0; i
|
|
|
|
|
Chuck Vought wrote: name += letters[i%2][rand()%letterlen[i%2]];
name will need to be declared, and then reset each time through the j loop.
Chuck Vought wrote: name[0] = toupper(name[0]);
Move this out of the inner for() loop.
Chuck Vought wrote: firstname[j]=firstname;
firstname[j] = name; Chuck Vought wrote: cout<< firstname[i];
cout << firstname[i].c_str() << endl;
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
name will need to be declared, and reset each time through the j loop?
how would i declare it each time?
string name;
|
|
|
|
|
Chuck Vought wrote: how would i declare it each time?
You only need to declare it once, up with the other declarations. You'll then need to reset it each time through the loop (so the concatenation works as you expect).
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
i have never done a string reset, how would i do that?
|
|
|
|
|
name = "";
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
I am getting two errors, first why cant I declare the array size from a user input called "num", and when I change it to a constant it runs but then get the following message" "string subscript out of range."
string firstname[num],lastname,name;
static const int namelen = numFirst;
static const char* letters[2] = { "bcdfghjklmnpqrstvwxyz", "aeiouy" };
static const int letterlength[2] = { strlen(letters[0]), strlen(letters[1]) };
srand(time(NULL));
for (int j=0; j<num; j++)
{
for (int i=0; i<numFirst; i++)
{
name = "";
name[i] += letters[i%2][rand()%letterlength[i%2]];
}
name[0]=toupper(name[0]);
firstname[j]=name;
}
for (int i=0; i<numLast; i++)
{
lastname[i] += letters[i%2][rand()%letterlength[i%2]];
lastname[0] = toupper(lastname[0]);
}
for(j=0;j<num;j++)
{
cout <<firstname[j].c_str() <<" ";
if(j=5)
{
cout<<endl;
}
}
|
|
|
|
|
Chuck Vought wrote: I am getting two errors, first why cant I declare the array size from a user input called "num"...
From what you've shown, num , numFirst and numLast have not been declared.
Chuck Vought wrote: name = "";
You need to move this out of the inner for() loop.
Chuck Vought wrote: if(j=5)
This will always evaluate to true. Is that your intent?
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
put it in the outer for loop or does it go with the declarations? i still get the error subscript out of range.
|
|
|
|
|
do you want me to e-mail a copy of my .cpp?
|
|
|
|