问题标题: 《 iofunction 头 文 件 》

0
0
已解决
薛乘志
薛乘志
初级启示者
初级启示者

在上次的输入/输出函数的基**(scan,print)上加以扩容,添加了功(pi)能(yong)强(mei)大(you)的format()函数

函数列表:

scan(...):输入(参数个数任意)

print(...):输出(参数个数任意)

format():接受cout可用的操作符(endl/fixed/setprecision等),并返回为print函数可接受的类型

format():接受一个类似于printf的参数(如:"%.2f", 3.1415926),返回处理过后的字符串("3.14")

format():闲的没事干:参数是什么就返回什么(恶搞专用)

//必要的头文件
#include <iostream>
#include <iomanip>
#include <string>
#include <cstdarg>
//主体部分:开始
namespace std { 
	inline ios_base& (*format(ios_base & (*__pf)(ios_base&)))(ios_base&) {
		return __pf;
	}
	inline ios& (*format(ios & (*__pf)(ios&)))(ios&) {
		return __pf;
	}
	inline ostream& (*format(ostream & (*__pf)(ostream&)))(ostream&) {
		return __pf;
	}
	inline string format(const char* format_string, ...) {
#ifdef STD_FORMAT_MAX_LENGTH
		char __f_text[STD_FORMAT_MAX_LENGTH];
#else
		char __f_text[32767];
#endif
		va_list __va_l;
		va_start(__va_l, format_string);
		vsprintf(__f_text, format_string, __va_l);
		va_end(__va_l);
		return __f_text;
	}
	inline string format(const string& format_string, ...) {
#ifdef STD_FORMAT_MAX_LENGTH
		char __f_text[STD_FORMAT_MAX_LENGTH];
#else
		char __f_text[32767];
#endif
		va_list __va_l;
		va_start(__va_l, format_string);
		vsprintf(__f_text, format_string.c_str(), __va_l);
		va_end(__va_l);
		return __f_text;
	}
	template<typename T> inline T format(T arg) {
		return arg;
	}
	template<typename A> inline void scan(A& arg) {
		cin >> arg;
	}
	template<typename A, typename ...B> inline void scan(A& arg, B& ...args) {
		cin >> arg;
		scan(args...);
	}
	template<typename A> inline void print(const A& arg) {
		cout << arg;
	}
	template<typename A, typename ...B> inline void print(const A& arg, const B& ...args) {
		cout << arg;
		print(args...);
	}
}
//主体部分:结束

// 正 常 写代码即可
using namespace std;

int main() {
	double a, b;
	scan(a, b);
	print(format("%.2f\n", a + b));                             //输出方式 1 (使用format()+格式化字符串)
	print(format(setprecision(2)), a - b, format(endl));        //输出方式 2 (使用format()+stl操作符)
	print(format(format("%.2f", format(a * b))), format('\n')); //输出方式 3 (使用format()嵌套)(恶搞)
	return 0;
}

 

薛乘志在2022-04-07 21:20:34追加了内容

补充:在“主体部分”前 #define STD_FORMAT_MAX_LENGTH 为任意数字可控制format函数返回的字符串最大长度


0
已采纳
万韧山
万韧山
初级天翼
初级天翼

****,一天到晚欺负我这个萌新是吧

火卓

我要回答