web-dev-qa-db-fra.com

Conversion de Char * en majuscule en C

J'essaie de convertir un char * En majuscules en c, mais la fonction toupper() ne fonctionne pas ici.

J'essaie d'obtenir le nom de la valeur de temp, le nom étant n'importe quoi avant les deux points, dans ce cas, c'est "Test", puis je veux capitaliser le nom complètement.

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

}

Je reçois l'erreur que la fonction toupper attend un int, mais reçoit un caractère *. Le fait est que je dois utiliser les char *, car c'est ce que la fonction prend en charge (je ne peux pas vraiment utiliser les tableaux de char ici, n'est-ce pas?).

Toute aide serait grandement appréciée.

4
EDEDE

toupper() convertit un seul char.

Utilisez simplement une boucle:

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

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

}

Détail: La fonction de bibliothèque standard toupper(int) est définie pour tous unsigned char Et EOF. Puisque char peut être signé, convertissez-le en unsigned char.

Certains OS supportent un appel de fonction qui fait ceci: upstr() et strupr()

12

toupper() ne fonctionne que sur un seul caractère. Mais il y a strupr() qui est ce que vous voulez pour un pointeur sur une chaîne.

4
wallyk

toupper() fonctionne sur un élément (int argument, valeur allant de la même façon que unsigned char ou EOF) à la fois.

Prototype:

int toupper(int c);

Vous devez utiliser une boucle pour fournir un élément à la fois à partir de votre chaîne .

2
Sourav Ghosh

Pour ceux d'entre vous qui veulent mettre en majuscule une chaîne et la stocker dans une variable (c'est ce que je cherchais quand j'ai lu ces réponses).

#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.
}

Remarque: Si vous souhaitez mettre une chaîne en minuscule à la place, remplacez toupper(s[a]) par tolower(s[a]).

1
Mike