6
votes

Comment changer le cas d'une chaîne en C ++?

J'ai une chaîne pouvant contenir des chiffres ainsi que des lettres majuscules et minuscules. J'ai besoin de convertir toutes les majuscules en minuscule et inversement. Comment aller à ce sujet?


3 commentaires

Est-ce que c'est une question d'un devoir?


Lol ouais c'est. Cependant, j'ai compris comment aller à ce sujet en utilisant les conseils de Matthew Iselins.


pour (char et c: str) c ^ = 32;


7 Réponses :


1
votes

Vous pouvez parcourir la chaîne et ajouter ou soustraire le nombre approprié de chaque caractère alpha de sorte que la valeur ASCII soit résolue à la valeur ASCII au cas opposé.


1 commentaires

Si vous allez le faire de cette façon, vous pourriez aussi bien basculer des bits..Je oubliez lequel c'est-à-dire, mais l'un des EM échangera le boîtier.



13
votes

Itéréter la chaîne et utiliser ispper () pour déterminer si chaque caractère est majuscule ou non. Si c'est majuscule, convertissez-la en minuscules en utilisant tolower () . Si ce n'est pas majuscule, convertissez-le en majuscules en utilisant Toupper () .


0 commentaires

14
votes

Voici un moyen de le faire sans boost:

#include <string>
#include <algorithm>
#include <cctype>
#include <iostream>

char change_case (char c) {
    if (std::isupper(c)) 
        return std::tolower(c); 
    else
        return std::toupper(c); 
}

int main() {
    std::string str;
    str = "hEllo world";
    std::transform(str.begin(), str.end(), str.begin(), change_case);
    std::cout << str;
    return 0;
}


1 commentaires

Nitpick mineur - Change_case au lieu de Swap_letters?



0
votes
char *str = "this is a test string";
while(*str != '\0') {
    if(*str <= 'Z' && *str >= 'A') {
       *str += 32;
    }
    if(*str >= 'a' && *str <= 'z') {
       *str -= 32;
    }
 str++;
}
Not secure at all, just giving you the idea.
This might be very helpful for this homework: 

7 commentaires

Ce n'est pas une réponse C ++ appropriée, imo.


Je suis d'accord, cela ne fonctionnerai pas sur Unicode ni d'autres caractères non ASCI, mais s'il comprendrait l'idée derrière ce code, ce serait une tâche de trival pour ajouter de la prise en charge de toute autre brict, sécurisée, prévenir la corruption du tas , etc..


Sans un autre jeté là-bas, cela convertira les majuscules en minuscules, puis le changer immédiatement en majuscules. En outre, pourquoi n'utilisez-vous pas de constantes de caractère ('A', 'Z', 'A', 'Z') pour une meilleure lisibilité?


@Pigben, il ne convertira pas les majuscules en minuscule, car le curseur fera progresser sa position de 1.


@Karim: Correct, il ne convertira pas le dos majuscule en minuscule, mais il convertira le dos minuscule en majuscule, comme je l'ai dit. Testez-le si vous ne me croyez pas.


Pas sécurisé? Si vous essayez de modifier un littéral. Test de caractère [] = "Ceci est une chaîne de test"; Char * str = & Test [0]; Ensuite, votre code fonctionnerait


-1. Char * et C-Fonctions qui traitent comme Strxxx, Printf, Scanf, etc. ont été responsables de faire 99% de tous les bugs du monde. Ne l'utilisez pas en C ++!



0
votes

Vous pouvez également renvoyer le 32 bit: fonctionne avec des caractères ASCII ainsi: xxx pré>

Vous pouvez également utiliser une table. Créez une table statique alors p>

char flipcase( char x )
{
   return fliptable[x];
}


0 commentaires

0
votes
#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main(){
    //Changecase to Uppercase
    string var = "This is a String.";
    for (unsigned int i = 0; i < var.length(); i++){
        if (islower(var[i]))
            var[i] = toupper(var[i]);
    }
    cout << var << endl;
    /*
    Output:
    THIS IS A STRING.
    */
    //Changecase to Lowercase
    var = "This is a String.";
    for (unsigned int i = 0; i < var.length(); i++){
        if (isupper(var[i]))
            var[i] = tolower(var[i]);
    }
    cout << var << endl;
    /*
    Output:
    this is a string.
    */
    //Flip the case
    var = "This is a String.";
    for (unsigned int i = 0; i < var.length(); i++){
        if (isupper(var[i]))
            var[i] = tolower(var[i]);
        else
            var[i] = toupper(var[i]);
    }
    cout << var << endl;
    /*
    Output:
    tHIS IS A sTRING.
    */

    system("pause");
    return 0;
}

0 commentaires

0
votes

La méthode standard C ++ pour ce faire est la suivante:

 THIS IS MY STRING TO BE UPPERCASED


0 commentaires