Tony Stark
Tony Stark

Reputation: 25518

How do I lowercase a string in C?

How can I convert a mixed case string to a lowercase string in C?

Upvotes: 149

Views: 392163

Answers (6)

WacoderForever
WacoderForever

Reputation: 1

You may use this user defined function:

char *ToLower(char *text){

    int stringlength=strlen(text);
    char *lower=(char*)malloc(sizeof(char)*stringlength);
    int i=0;

    while(i<stringlength){
        //checking if the character is an uppercase
        if((text[i]-'A')<=25){

            lower[i]=text[i]+32;
        }
        //if the character is lowercase
        else{

            lower[i]=text[i];
        }

        i++;
    }

    return lower;
}

Upvotes: -1

congdc
congdc

Reputation: 65

I'm new to C and have been trying hard to convert strings from uppercase to lowercase. I made the mistake of changing the string 'A' + 32 = 'a'. And I can't solve the problem.

I used char type and finally I was able to convert it to string type. You can consult:

#include <ctype.h>
#include <stdio.h>
#include <string.h>

string convert_lower(string str)
{
    int length = strlen(str);
    char c[length + 1];

    for (int i = 0; i < length; i++)
    {
        if (str[i] <= 'Z' || str[i] >= 'A')
        {
            c[i] = tolower((char)str[i]);
        }
    }
    c[length] = '\0';
    string text = c;
    return text;
}

Upvotes: -1

Ken S
Ken S

Reputation: 53

If we're going to be as sloppy as to use tolower(), do this:

char blah[] = "blah blah Blah BLAH blAH\0";
int i = 0;
while( blah[i] |=' ', blah[++i] ) {}

But, well, it kinda explodes if you feed it some symbols/numerals, and in general it's evil. Good interview question, though.

Upvotes: 2

Oleg Razgulyaev
Oleg Razgulyaev

Reputation: 5935

to convert to lower case is equivalent to rise bit 0x60 if you restrict yourself to ASCII:

for(char *p = pstr; *p; ++p)
    *p = *p > 0x40 && *p < 0x5b ? *p | 0x60 : *p;

Upvotes: 11

cscan
cscan

Reputation: 374

Looping the pointer to gain better performance:

#include <ctype.h>

char* toLower(char* s) {
  for(char *p=s; *p; p++) *p=tolower(*p);
  return s;
}
char* toUpper(char* s) {
  for(char *p=s; *p; p++) *p=toupper(*p);
  return s;
}

Upvotes: 7

Earlz
Earlz

Reputation: 63805

It's in the standard library, and that's the most straight forward way I can see to implement such a function. So yes, just loop through the string and convert each character to lowercase.

Something trivial like this:

#include <ctype.h>

for(int i = 0; str[i]; i++){
  str[i] = tolower(str[i]);
}

or if you prefer one liners, then you can use this one by J.F. Sebastian:

for ( ; *p; ++p) *p = tolower(*p);

Upvotes: 213

Related Questions