Вопрос

Я нашел следующий код 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# string формата C ++ «%s_%0*s.bmp»?

Редактировать, @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, как я предполагаю, это ошибка в исходном коде. Я думаю, что маловероятно, что длина прокладки на имя файла должна была увеличиваться по одному в каждой итерации петли.

Другие советы

Для форматирования деталей, таких как 0* в %0*s, Я бы сделал это так:

string.Format("{0}_{1}.bmp", prefix, frames[k].PadLeft(k,'0'));

Если у меня это правильно, это займет frames[k], и оставил его с 0.

например:

k=10;
frames[k] = "Hello";
frames[k].PadLeft(k,'0') ==> "00000Hello";

Это то, что тебе нужно?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top