2017-06-03 20 views
-3

私は、文字列のすべての小文字を大文字に変換する必要がありますが、質問ごとにコード内の特定の行を変更しないでください。私は以下のコードを書いた。C++で文字列の小文字を大文字に変換する方法は?

#include <iostream> 
#include <string> 
#include <stdio.h> 
#include <ctype.h> 
using namespace std; 

class StringOps { 
public: 
    void stringToUpper(string &s) //This line should not be changed 
    { 
    char c; 
    int i=0; 
    while (s[i]) 
    { 
    c=s[i]; 
    putchar (toupper(c)); 
    i++; 
    } 
    } 
}; 

int main(void) 
{ 
    string str ="Hello World"; 
    StringOps obj; 
    obj.stringToUpper(str); 
    cout << str;   //This line should not be changed 
    return 0; 
    } 

私のように出力を得る:

HELLO WORLDHello World 

しかし、必要な出力は次のとおりです。

HELLO WORLD HELLO WORLD 

どのように私はmain()の中

cout<<str; 

文を作るのですか関数で計算された結果を出力する:

void stringToUpper(string &s) 
+0

まあ、あなたはt 'stringToUpper'で' s'を変更してください。 – aschepler

+1

あなたは現在行っているようなものを出力するのではなく、 'stringToUpper' _change_' s'を作るべきです。 –

+0

ありがとうございます!今私は間違いを理解した。 –

答えて

0

解決策は、ASCII文字の下位部分のみです。

class StringOps { 
public: 
    void stringToUpper(string& s) //This line should not be changed 
    { 
    for (size_t i = 0; i < s.size(); ++i) { 
     if (s[i] > 96 && s[i] < 123) 
     s[i] -= 32; 
    } 
    } 
}; 

、あなたはASCIIテーブルの高い部分を心配している場合:

class StringOps { 
public: 
    void stringToUpper(string& s) //This line should not be changed 
    { 
    for (size_t i = 0; i < s.size(); ++i) { 
     s[i] = toupper(s[i]); 
    } 
    } 
}; 

あなたには、いくつかのマルチバイトエンコーディングを持っている場合は、UTF-8のように、あなたには、いくつかのライブラリが必要になります。

+0

ありがとうございます! –

0

cout < < str; //この行は変更しないでください

これは、strを変更する必要があることを意味します。

無効stringToUpper(文字列&複数可)//この行は

グッドニュースを変更すべきではない、あなたの方法は、基準としてsを取ります。あなたのコードで

は、あなたがあなたの文字列に文字を再割り当てする必要がありc=s[i];やっているs[i] = c

0
あなただけの上位文字として各文字を作って文字列を印刷している

が、「(参照することにより)関数に渡された文字列s "は変更されません。

ラインがvoid stringToUpper(文字列&秒)に変更を取得するのをするために追加することができます
void stringToUpper(string &s) 

s[i] = toupper(c); 

コードは

c=s[i]; 
s[i] = toupper(c); 
putchar (toupper(c)); 
i++; 

出力が

HELLO WORLDHELLO WORLD 
になります見ていきます
関連する問題