2017-08-26 7 views
1

je suis en train de convertir la chaîne en chaîne de lettre majuscule en attribuant seule chaîne Char à comme ceci: -Comment affecter un caractère à un objet chaîne en C++?

#include <iostream> 
#include <string> 
#include <cstring> 
#include <cctype> 
using namespace std; 

int main() 
{ 
    string a; 
    getline(cin,a); 
    string b; 
    b.reserve(a.size()+1); 
    for(int i=(a.size()),i1=0;1;i1++) 
    { 
    if(b[i1]!='\0') 
     b[i1]=(char)toupper(a[i1]); 
    else 
    { 
     a[i1]='\0'; 
     break; 
    } 
    } 
    cout << b <<endl; 
} 

tous lorsqu'il est exécuté par a.out ./a.out, seulement endl obtient des impressions

ici est échantillon exécuter: -

$ ./a.out 
play clash royale 

$ 

Qu'est-ce qui ne va pas dans mon programme ?? Comment puis-je attribuer un caractère unique à la chaîne?

+0

test '' et attribuer a' b' –

+0

@GillesGouaillardet signifie ??? –

+0

essayez d'afficher après avoir inversé la chaîne ('cout << b << endl;'). Ensuite, si cela fonctionne, vérifiez la boucle et la condition – Blasanka

Répondre

3

Il y a quelques problèmes avec votre programme. Le principal est probablement la différence entre string reserve et string resize. Qu'est-ce que vous voulez dans votre programme est déjà eu une chaîne de longueur a.size(), alors, utilisez b.resize(a.size()).

Une version de travail est ci-dessous (il y a de meilleures façons d'écrire cela, il suffit d'être plus conforme à la proposition OP):

#include <iostream> 
#include <string> 
#include <cstring> 
#include <cctype> 
using namespace std; 

int main() 
{ 
    string a; 
    getline(cin,a); 
    string b; 
    b.resize(a.size()); 
    for(int i1=0; i1 < a.size();i1++) 
    { 
     if(a[i1]!='\0') 
      b[i1]=(char)toupper(a[i1]); 
     else 
     { 
      b[i1]='\0'; 
      break; 
     } 
    } 
    cout << b <<endl; 
} 
+0

Si vous utilisez C++ 11, vous pouvez simplement faire: 'for (char chA: a) {...}' et remplacer tous les 'a [i1] 'dans la boucle par' chA' – TuanDT

+1

@ Tuan333 j'utiliserais 'std :: transform (a.begin(), a.end(), a.begin(), :: toupper);' à une conversion d'implace ou ' std :: transform (a.begin(), a.end(), b.begin(), :: toupper); 'mettre en b – Amadeus

+0

True. Je pensais que nous sommes en train de modifier le code source de l'OP, alors j'ai pensé que j'éclairerais quelques commentaires pour le rendre plus moderne: P – TuanDT