2009-10-16 3 views
6

n 개의 문자로 된 문자열을 만드는 방법이 필요합니다. 이 경우 ascii 값은 0입니다.표준 템플릿 String 클래스 : string.fill()

은 내가 생성자를 호출하여 작업을 수행 할 수 있습니다 알고

문자열 sTemp (125000에 'a');

하지만 많은 곳에서 sTemp를 다시 사용하고 다른 길이로 채우고 싶습니다.

나는 문자열 포인터와 길이를 인수로 취해 바이트로 문자열을 채우는 라이브러리를 호출하고있다. (나는 기술적으로 문자열이 인접하지 않다는 것을 알고 있지만 모든 의도와 목적을 위해 곧 표준이 될 것입니다). 나는 벡터를 사용하고 싶지 않다.

문자열을 만든 후에 다시 생성자를 호출하는 영리한 방법이 있습니까?

답변

12

string 클래스는 주어진 문자열에 새로운 값을 할당하는 방법 assign을 제공합니다. 서명은

1. string& assign (const string& str); 
2. string& assign (const string& str, size_t pos, size_t n); 
3. string& assign (const char* s, size_t n); 
4. string& assign (const char* s); 
5. string& assign (size_t n, char c); 
6. template <class InputIterator> 
    string& assign (InputIterator first, InputIterator last); 

이다 인용 출처 : (. 그것은 당신에게 표준 라이브러리 ++은 C의 매우 정교 참조를 제공하기 때문에 나는이 웹 사이트를 추천) cplusplus.com

난 당신이 다섯 번째 같은 뭔가를 찾고 있다고 생각 이 함수들 중 n은 문자열의 원하는 길이를 지정하고 c이 문자열에 채워진 문자를 지정합니다. 예를 들어, 작성하는 경우

sTemp.assign(10, 'b'); 

문자열은 10 b로만 채워집니다.

원래 STL 알고리즘 std::fill을 사용하도록 제안했으나 문자열 길이는 변경되지 않습니다. 메서드 string::resize은 문자열의 크기를 변경하는 방법을 제공하고 추가 된 문자를 지정된 값으로 채 웁니다. 그러나 추가 된 문자 만 설정됩니다. 마지막으로 string::assign은 최상의 접근 방식을 유지합니다!

+0

왜 아래로 투표를? 그 이유에 대해 적어도 코멘트를 남겨주세요. 이 방법으로 만 배울 수 있습니다! – phlipsy

+0

나는 downvote하지 않았지만 가능하면 다른 #include는 필요 없다. –

+0

채우기가 좋지 않다는 사실은 문자열의 크기를 변경할 수 없기 때문에 좋지 않다는 것을 알았다. resize는 초기 문자 만 사용하여 문자열의 새 문자를 초기화합니다 (크기 조절 후). 원래 문자열이 그대로 유지됩니다. 그것들은 "생성자를 다시 호출하십시오"라는 원하는 효과와 일치하지 않습니다. 적절한 기능이 할당됩니다. –

3

한번에 사용하기 :

sTemp.resize(newLength, 'a'); 

참고 :

void __CLR_OR_THIS_CALL resize(size_type _Newsize) 
    { // determine new length, padding with null elements as needed 
    resize(_Newsize, _Elem()); 
    } 

void __CLR_OR_THIS_CALL resize(size_type _Newsize, _Elem _Ch) 
    { // determine new length, padding with _Ch elements as needed 
    if (_Newsize <= _Mysize) 
     erase(_Newsize); 
    else 
     append(_Newsize - _Mysize, _Ch); 
    } 
+1

"다음과 같음"이라고 말하면 오해의 소지가 있습니다. 그것은 하나의 구현입니다. – GManNickG

+0

네 말이 맞아, 나는 바꿔 말했어. –

+0

또한 잘못된 크기 조정 기능입니다. – GManNickG