ho trovato il seguente codice C++ (commenti me aggiunto):Traducendo C++ string.Format s
// 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());
Allora provo a tradurre in 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]);
In sostanza, ciò che sarebbe l'equivalente C# della stringa di formato C++ "% s_% 0 * s.bmp"?
Modifica, @ Mark Byers:
ho provato il codice e ha fatto un piccolo programma di test:
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();
}
Non è imbottitura per qualche motivo.
Modifica: Ho funzionato; non sarà pad se n = 2.
Sei sicuro di voler riutilizzare 'k' per due scopi diversi? –
Sei sicuro di queste stringhe di formato? Specificamente: '% 0 * s' - il modificatore' 0' in congiunzione con la conversione 's' è, secondo la pagina man qui, comportamento non definito. – Thanatos
Questo è quello che mi è stato dato quando guardavo un programma open-source. – thebackup