sprintf에 해당하는 C ++?
그 알 std::cout
의 동등한 C ++입니다 printf
.
C ++에 해당하는 것은 무엇입니까 sprintf
?
예:
#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
'Programing' 카테고리의 다른 글
변경 가능한 맵을 변경 불가능한 맵으로 변환 (0) | 2020.11.02 |
---|---|
Markov 체인은 유한 상태 기계와 동일합니까? (0) | 2020.11.02 |
sprintf에 해당하는 C ++? (0) | 2020.11.02 |
ZooKeeper 대안? (0) | 2020.11.02 |
클러스터 환경에서 실행되는 Spring Scheduled Task (0) | 2020.11.02 |