gpt4 book ai didi

c# - 翻译 C+ +'s sprintf format string to C#' s string.Format

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:04 25 4
gpt4 key购买 nike

我找到了下面的C++代码(注释是我自己加的):

// frame_name is a char array
// prefix is std::string
// k is a for loop counter
// frames is a std::vector string
sprintf(frameName, "%s_%0*s.bmp", prefix.c_str(), k, frames[k].c_str());

然后我尝试将它翻译成 C#

// prefix is string
// k is a for loop counter
// frames is List<string>
string frameName = string.Format("{0}_(what goes in here?).bmp", prefix, k, frames[k]);

基本上,C++ 格式字符串“%s_%0*s.bmp”的 C# 等价物是什么?

编辑,@Mark Byers:

我试过你的代码并做了一个小测试程序:

static void Main(string[] args)
{
List<string> frames = new List<string>();
frames.Add("blah");
frames.Add("cool");
frames.Add("fsdt");

string prefix = "prefix";
int n = 2;
int k = 0;
string frameName = string.Format("{0}_{1}.bmp", prefix, frames[k].PadLeft(n, '0'));
Console.WriteLine(frameName); // outputs prefix_blah.bmp, should output prefix_00blah.bmp
Console.ReadLine();
}

由于某种原因,它不是填充。

编辑:让它工作;如果 n = 2,则不会填充。

最佳答案

要用零填充字符串,请使用 string.PadLeft :

frames[k].PadLeft(n, '0')

结合string.Format :

int n = 15; // Get this from somewhere.
string frameName = string.Format("{0}_{1}.bmp",
prefix,
frames[k].PadLeft(n, '0'));

请注意,我已将 k 更改为 n,因为我认为这是原始代码中的错误。我认为文件名上的填充长度不太可能在循环的每次迭代中增加一个。

关于c# - 翻译 C+ +'s sprintf format string to C#' s string.Format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2982388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com