patterncMinor
String case reverse function in C
Viewed 0 times
casefunctionstringreverse
Problem
This reverses the case of a character in a string (a string being an array of characters). How does it look? Anything I can improve on? Besides documentation, in particular, any thoughts on the type casting found in
str_case_rev?#include // fprintf
#include // malloc
#include // strlen
#include // toupper, tolower
/*
* a string is an array of characters, in C, all arrays
* are always passed never passed value, always a pointer to
* the variable
* This is why the caller does not need to call the function like:
* camel_case_rev(src, &dest, len)
*
* Since here the array of characters ("a string") is already being
* passed as a pointer value
*/
void str_case_rev(const char *src, char *dest, size_t len)
{
size_t i = 0;
for(; i = 'A')
{
*(dest + i) = (char)tolower((int)src[i]);
}
else if(src[i] = 'a')
{
*(dest + i) = (char)toupper((int)src[i]);
}
else
{
*(dest + i) = src[i];
}
}
i++;
*(dest + i) = '\0';
}
int main(int argc, char **argv)
{
if(argc \n", argv[0]);
return EXIT_FAILURE;
}
char *dest = NULL;
size_t len = strlen(argv[1]);
dest = malloc(len + 1);
if(NULL == dest)
{
fprintf(stderr, "Memory error\n");
return EXIT_FAILURE;
}
str_case_rev(argv[1], dest, len);
fprintf(stdout, "%s\n", dest);
free(dest);
return EXIT_SUCCESS;
}Solution
The case determination code (
src[i] = 'A') doesn't look right (think about locales). isupper and islower are specifically designed to deal with that. Besides, you are already using toupper and tolower.Context
StackExchange Code Review Q#67610, answer score: 4
Revisions (0)
No revisions yet.