Programing

sprintf에 해당하는 C ++?

lottogame 2020. 11. 2. 07:33
반응형

sprintf에 해당하는 C ++?


그 알 std::cout의 동등한 C ++입니다 printf.

C ++에 해당하는 것은 무엇입니까 sprintf?


std::ostringstream

예:

#include <iostream>
#include <sstream> // for ostringstream
#include <string>

int main()
{
  std::string name = "nemo";
  int age = 1000;
  std::ostringstream out;  
  out << "name: " << name << ", age: " << age;
  std::cout << out.str() << '\n';
  return 0;
}

산출:

name: nemo, age: 1000

2019 년 8 월 업데이트 :

C ++ 20에 std::format. 참조 구현은 {fmt} 입니다. printf()지금 대안을 찾고 있다면 이것은 새로운 "표준"접근 방식이 될 것이며 고려할 가치가 있습니다.

실물:

Boost.Format을 사용하십시오 . 그것은 printf구문, 형식 안전성, std::string결과 및 기타 멋진 것들을 많이 가지고 있습니다. 당신은 돌아 가지 않을 것입니다.


sprintf 는 C ++에서 잘 작동합니다.


iomanip 헤더 파일을 사용하여 출력 스트림을 형식화 할 수 있습니다. 이것을 확인 하십시오 !


다음은 C ++ sprintf를위한 멋진 함수입니다. 스트림을 너무 많이 사용하면 스트림이 추악해질 수 있습니다.

std::string string_format(const std::string &fmt, ...) {
    int n, size=100;
    std::string str;
    va_list ap;

    while (1) {
        str.resize(size);
        va_start(ap, fmt);
        int n = vsnprintf(&str[0], size, fmt.c_str(), ap);
        va_end(ap);

        if (n > -1 && n < size)
            return str;
        if (n > -1)
            size = n + 1;
        else
            size *= 2;
    }
}

C ++ 11 이상에서, 표준 : : 문자열은 연속 스토리지를 사용하도록 보장 그게 끝 '\0'이로 캐스팅 할 법적, 그래서 char *사용 &str[0].


동일한 효과를 얻으려면 stringstream을 사용하십시오. 또한 <cstdio>snprintf를 포함 하고 계속 사용할 수 있습니다 .


정확히 무엇을 계획하는지에 따라 다른 옵션보다 유용하고 관용적 sprintf()std::to_string()수 있습니다.

void say(const std::string& message) {
 // ...
}

int main() {
  say(std::to_string(5));
  say("Which is to say " + std::to_string(5) + " words");
}

std::to_string()IMHO 의 가장 큰 장점은 문자열 sprintf()화를 꿈도 꾸지 못하는 추가 유형을 지원하도록 쉽게 확장 할 수 있다는 것입니다 Object.toString().

참고 URL : https://stackoverflow.com/questions/4983092/c-equivalent-of-sprintf

반응형