Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting Char * to Uppercase in C

I'm trying to convert a char * to uppercase in c, but the function toupper() doesn't work here.

I'm trying to get the name of the the value of temp, the name being anything before the colon, in this case it's "Test", and then I want to capitalize the name fully.

void func(char * temp) {
 // where temp is a char * containing the string "Test:Case1"
 char * name;

 name = strtok(temp,":");

 //convert it to uppercase

 name = toupper(name); //error here
 
}

I'm getting the error that the function toupper() expects an int, but receives a char *. Thing is, I have to use char *s, since that is what the function is taking in, (I can't really use char arrays here, can I?).

Any help would be greatly appreciated.

like image 835
EDEDE Avatar asked Feb 03 '16 16:02

EDEDE


2 Answers

toupper() converts a single char.

Simply use a loop:

void func(char * temp) {
  char * name;
  name = strtok(temp,":");

  // Convert to upper case
  char *s = name;
  while (*s) {
    *s = toupper((unsigned char) *s);
    s++;
  }

}

Detail: The standard Library function toupper(int) is defined for all unsigned char and EOF. Since char may be signed, convert to unsigned char.

Some OS's support a function call that does this: upstr() and strupr()

like image 106
chux - Reinstate Monica Avatar answered Sep 30 '22 11:09

chux - Reinstate Monica


For those of you who want to uppercase a string and store it in a variable (that was what I was looking for when I read these answers).

#include <stdio.h>  //<-- You need this to use printf.
#include <string.h>  //<-- You need this to use string and strlen() function.
#include <ctype.h>  //<-- You need this to use toupper() function.

int main(void)
{
    string s = "I want to cast this";  //<-- Or you can ask to the user for a string.

    unsigned long int s_len = strlen(s); //<-- getting the length of 's'.  

    //Defining an array of the same length as 's' to, temporarily, store the case change.
    char s_up[s_len]; 

    // Iterate over the source string (i.e. s) and cast the case changing.
    for (int a = 0; a < s_len; a++)
    {
        // Storing the change: Use the temp array while casting to uppercase.  
        s_up[a] = toupper(s[a]); 
    }

    // Assign the new array to your first variable name if you want to use the same as at the beginning
    s = s_up;

    printf("%s \n", s_up);  //<-- If you want to see the change made.
}

Note: If you want to lowercase a string instead, change toupper(s[a]) to tolower(s[a]).

like image 23
Mike Avatar answered Sep 30 '22 12:09

Mike