用C
用C 编写程序,计算1! 2! 3! …… N! .要求:编写一个子函数计算阶乘?
编写程序,计算1! 2! 3! …… N! .要求:编写一个子函数计算阶乘?
#include iostream
using namespace std;
int f(int i)
{
int t1,j;
for(j1;ji;j )
tt*j;
return t;
}
int main(int argc, char* argv[])
{
int N,i, sum0;
cout输入N:;
cinN;
for(i1;iN;i )
sumsum f(i);
coutsumsumendl;
return 0;
}
函数不能嵌套定义。所以int f(int i) 函数需要放在主函数外面。修改后的代码可以正确运行。
如何将WCHAR转成std:string?
C 11的std::wstring_convert配合std::codecvt模板类完全可以解决这个问题,不会出现@vczh
所说修改了全局locale会导致污染其他库的问题。
这两个模板类的功能是:
std::wstring_convert:转码器,接收一个类似codecvt描述编码转换特性的模板参数,用于将本地化的宽字符wstring和指定编码的字节化string进行互转。
std::codecvt:编码转换特性类,用在wstring_convert的模板参数中来指定使用哪种编码。
所以编码A和B互转的实现方式就是:借助本地化宽字符串,先将以A编码的string转为本地化的wstring,再将本地化的wstring转为B编码后的string。
codecvt一般使用下面两个特化子类:
std::codecvt_utf8wchar_t:用于UTF8和本地化wchar_t的互转
std::codecvt_bynamewchat_t, char, std::mbstate_t:用于其他编码(例如GBK)和本地化wchar_t的互转,类的构造函数需要传入编码的locale name,由于编码的locale name是操作系统决定的(例如GBK在linux下的locale名可能是zh_,而windows下是.936),因此做跨平台的话仍然要给不同的系统做适配。
这里给一个windows下,GBK string转UTF8 string的例子:首先将GBK string转wstring
再将wstring转为UTF8 string转码就完成了。utf8_str里的内容应该是xE7x83xAB(烫的UTF8)。