Curtis
Curtis

Reputation: 1

ASCII and isalpha if statement issue

I am writing a program that takes a user inputted character, such as A, and a user inputted number, such as 7. The program checks the validity of the character, if true runs thru till it gets to this loop inside of a function. I am using ascii decimal for this loop inside of a function. This loop needs to check isalpha and if it is run the code inside the {}'s, it's doing that correctly. The else is not working the way I want and am not sure how to correct it. I need the else (is not alpha) to add a 1 back to the counter in the loop and increase the ascii by 1. If I run it as so, it gives off a retry/ignore/abort error. If I run it without the num++; it runs and stops after the loop ends. So, if you put in a Z and choose 3, it runs thru the loop 3 times and outputs just a Z. Any thoughts on how to fix this?

I need it to output something like: Input: Z Input: 4 it should output: Z A B C to the screen. It needs to ignore other ascii non alpha characters.

Thanks

string buildSeries(char A, int num)
{
//builds the output with the info the
//user inputted
stringstream str1;
string outted;
int DeC=(int)A, i = 0;

//loop builds the output
for(i=0;i<num;i++)
{


        if (isalpha(DeC))
        {
            //converts the decimal to a letter
            str1<<(char)DeC;
            //adds a space
            str1<<" ";
            //increases the decimal
            DeC++;
        }
        else
        {
        num++;
        DeC++;
        }


}

    //builds the sstream and puts it in
    //variable "outted"
    outted = str1.str();


return outted;

}

Upvotes: 0

Views: 1245

Answers (2)

shf301
shf301

Reputation: 31404

If you need to loop back to 'A' at Z change your DeC++ to

if DecC == 'Z'
    DecC = 'A'
else
    DecC++;

Or you could get fancy and use the modulus operator

Edit

I think the problem may be that this stringstream insertion operator, >>, doesn't have an overload that handles a char. It's converting the char to a short or an int then inserting it. Try using string::append(size_t size, char c) instead. That should handle inserting a char.

That is replace you calls to str1<<(char)DeC; with outted.append(1, (char)DeC) and remove your use of the string stream

Upvotes: 1

Martin Beckett
Martin Beckett

Reputation: 96167

What is DeC? The phrase "ascii list" makes me suspect it's a 'C' string, in which case you are calling isAlpha() on the pointer not on the value in the string.

edit: If for example you have

char DeC[40];

// read in a string form somewhere

// DeC is a pointer to some memory it has a value of a 32 or 64bit number
if ( isAlpha(DeC) {

// what you might have meant is 
if ( isAlpha(*DeC) { // the character value at the current position in DeC

Upvotes: 0

Related Questions