2011-03-23 5 views
3

다음 콘솔 응용 프로그램을 사용하여 각 문자열을 대문자로 변환합니다. 그러나 출력의 문자열 값은 변경되지 않습니다. 내가 여기서 잘못하고있는 것. 이 작업을 효율적으로 수행하는 데 도움이 될 것입니다. 도움을 주셔서 감사합니다.문자열을 대문자로 변환하는 문제가 발생했습니다.

int main() 
{  

    vector<string> svec, svec_out; 
    string word; 
    int run; 

    cout << "Press 0 to quit giving input string" << endl; 

    while(1) 
    { 
     cin >> word; 
     svec.push_back(word); 

     cin >> run; 
     if (!run) 
      break; 
    } 

    cout << "converting to upper case... " << endl; 

    int i; 
    for (i = 0; i!=svec.size(); ++i) 
    { 
     word = svec[i]; 
     for (string::size_type j=0; j < word.size(); ++j) 
     { 
      toupper(word[j]); 
     } 

     svec_out.push_back(word); 
    } 


    for (i = 0; i<svec_out.size(); i++) 
     cout << svec_out[i] << endl; 

    return 0; 
} 

답변

7

toupper은 내부 값을 수정하는 대신 대문자 값을 반환합니다. 따라서 귀하의 코드는 다음과 같아야합니다.

word[j] = toupper(word[j]); 
0

좋아요. 나는 당신이 당신의 단어해야

word[j] = toupper(word[j]); 

에 TOUPPER 값을 할당해야한다고 생각 보수 ToUpper() 메소드의 반환 값

+0

그럼 당신은 대답을 받아 들여야 장을 그 너를 도왔다. (너의 자신의 힘으로 해결했다면). – Johnsyweb

+0

@ Johnsyweb : 새로운 stackoverflow에 나는 그것의 기능을 배우고있다. 나에게 그것을 가리키는 것을 감사 : – lycon

+0

당신은 매우 StackOverflow에 오신 것을 환영합니다! – Johnsyweb

0

사용 std::transform 등 :

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

int main() { 
    std::string s="nawaz"; 
    std::string S; 
    std::transform(s.begin(),s.end(), std::back_inserter(S), ::toupper); 
    std::cout << S ; 
} 

출력 :

NAWAZ 

온라인 데모 : (자세한 답변 이상) http://ideone.com/WtbTI

+0

을 포함 할 때 std 네임 스페이스에서 toupper()가 아닌가? 그것이 나에게도 컴파일되도록 신경을 써라. 나는 단지 큰 소리로 생각하고 있었다. –

+0

@Martin : 이전에는'std :: toupper'를 작성했지만 컴파일하지 않았습니다. 그러나'std ::'를 제거했을 때 놀랍게 컴파일되었습니다. 그래서 나는 당신이하는 것처럼 똑같은 의심을 품습니다! – Nawaz

0
#include <algorithm> 
using namespace std; 
transform(svec[i].begin(), svec[i].end(), svec[i].begin(), toupper); 
1

간단한 알림 :와 전화 ::의 ToUpper char 유형은 정의되지 않은 동작입니다 (대부분의 implementa 대부분의 경우 시간을 최대한 활용하려고 노력하십시오. global :: toupper 함수는 int 입력이 필요하며 int는 범위 [0, UCHAR_MAX] 또는 EOF (일반적으로 -1)와 같아야합니다. 일반 문자가 서명 된 경우 (가장 빈번한 경우) 결국 음수 값을 사용하여 :: toupper를 호출합니다.

+0

+1 나를 가르치는 것이 중요합니다;) – odinthenerd

0

내가 코드의 짧은 비트에 입찰 :

#include <boost/algorithm/string.hpp> 

boost::to_upper(svec); 

당신은 Boost String Algorithm에서 많은 사람들이 더 찾을 수는 [to_upper][2]는 장소에 문자열을 수정하고 또한이 (변형) 복사 잎 반환하는 to_upper_copy 사촌, 특징 본래 끈은 손길이 닿지 않았다.

0

좀 구식이지만 변경할 수 있습니다

for (string::size_type j=0; j < word.size(); ++j) 
    { 
     toupper(word[j]); 
    } 

에 :

for (auto &j : word) // for every j in word (note j is a reference) 
    j=toupper(j); // replace that j with it's uppercase 

그냥 C++ 입문서에서이 물건을 배웠다 - 부 - 3

관련 문제