문제

사용 중입니다 std::string 주어진 너비로 패드를 남겨 두어야합니다. C ++ 에서이 작업을 수행하는 권장 방법은 무엇입니까?

샘플 입력 :

123

패드 ~ 10 자.

샘플 출력 :

       123

(123 앞의 7 개 공간)

도움이 되었습니까?

해결책

std :: setw (setwidth) 조작기

std::cout << std::setw (10) << 77 << std::endl;

또는

std::cout << std::setw (10) << "hi!" << std::endl;

출력 77 및 "안녕하세요!".

문자열로 결과가 필요한 경우 std :: stringstream의 std :: cout 객체의 std :: stringstream의 인스턴스를 사용하십시오.

추신 : 책임있는 헤더 파일 <iomanip>

다른 팁

void padTo(std::string &str, const size_t num, const char paddingChar = ' ')
{
    if(num > str.size())
        str.insert(0, num - str.size(), paddingChar);
}

int main(int argc, char **argv)
{
    std::string str = "abcd";
    padTo(str, 10);
    return 0;
}

다음과 같이 사용할 수 있습니다.

std::string s = "123";
s.insert(s.begin(), paddedLength - s.size(), ' ');

내가 생각할 수있는 가장 쉬운 방법은 stringstream입니다.

string foo = "foo";
stringstream ss;
ss << setw(10) << foo;
foo = ss.str();

foo 이제 패딩해야합니다.

N 공간이 포함 된 문자열을 호출하여 만들 수 있습니다.

string(N, ' ');

그래서 당신은 이것을 좋아할 수 있습니다 :

string to_be_padded = ...;
if (to_be_padded.size() < 10) {
  string padded(10 - to_be_padded.size(), ' ');
  padded += to_be_padded;
  return padded;
} else { return to_be_padded; }
std::string pad_right(std::string const& str, size_t s)
{
    if ( str.size() < s )
        return str + std::string(s-str.size(), ' ');
    else
        return str;
}

std::string pad_left(std::string const& str, size_t s)
{
    if ( str.size() < s )
        return std::string(s-str.size(), ' ') + str;
    else
        return str;
}

멋지고 간단한 방법이 있습니다 :)

const int required_pad = 10;

std::string myString = "123";
size_t length = myString.length();

if (length < required_pad)
  myString.insert(0, required_pad - length, ' ');

어때요 :

string s = "          "; // 10 spaces
string n = "123";
n.length() <= 10 ? s.replace(10 - n.length(), n.length(), s) : s = n;

나는 VCL을 개발하기 때문에 주제를 찾고 있었다. 어쨌든 기능을 만드는 것은 그렇게 어렵지 않았습니다.

void addWhiteSpcs(string &str, int maxLength) {
    int i, length;

    length = str.length();
    for(i=length; i<maxLength; i++)
    str += " ";
};

string name1 = "johnny";
string name2 = "cash";

addWhiteSpcs(name1, 10);
addWhiteSpcs(name2, 10);

두 경우 모두 오른쪽 10 개의 빈 공간에 추가됩니다. 나는 올바른 형식으로 택배 나 컨소시어와 같은 모노 스페이스 글꼴을 사용하도록 권장합니다.

이것은 Monospace 글꼴을 사용하지 않을 때 발생하는 일입니다.
남자____
현금______

// using monospace font the output will be
johnny____
cash______

두 경우 모두 길이가 동일합니다.

10 개의 공백의 새 문자열을 만들고 두 문자열로 뒤로 작업하십시오.

string padstring(const string &source, size_t totalLength, char padChar)
{
    if (source.length() >= totalLength) 
        return source;

    string padded(totalLength, padChar);
    string::const_reverse_iterator iSource = source.rbegin();
    string::reverse_iterator iPadded = padded.rbegin();
    for (;iSource != source.rend(); ++iSource, ++iPadded)
        *iPadded = *iSource;
    return padded;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top