C++: Присоединиться к массиву WCHAR [] s?

У меня есть массив WCHAR [] s. Как я могу присоединиться к ним?

Я знаю длину массива.

[L"foo", L"bar"] => "foo, bar"
1
задан Nick Heiner 4 June 2010 в 23:35
поделиться

3 ответа

Переберите эти строки и добавьте их в std::wstring:

std::wstring all;

wchar_t *data[] = { L"foo", ... };
size_t data_count = sizeof(data) / sizeof(*data);

for (size_t n = 0; n < data_count; ++n)
{
    if (n != 0)
        all += L", ";
    all += data[n];
}
4
ответ дан 3 September 2019 в 00:02
поделиться

Слегка улучшенная версия решения R Samuel Klatchko.

wchar_t *data[] = { L"foo", ... };
size_t data_count = sizeof(data) / sizeof(*data);

wchar_t result[STUFF];

wcscpy(result, data[0]);
for (std::size_t n = 1; n < data_count; ++n)
{
    wcscat(result, L", ");
    wcscat(result, data[n]);
}

Улучшение заключается в том, что в цикле нет зависимости от ветви if. Я перешел на функции wcsXXXX стандартной библиотеки C, но я бы использовал std::wstring, если он доступен.

EDIT:

Предполагая

что я знаю длину массива.

означает "я знаю количество строк, которые я хочу соединить", то вы не можете использовать то, что я написал выше, что требует, чтобы вы знали конечную длину строки назначения во время компиляции.

Если вы не знаете во время компиляции, используйте этот вариант, который работает иначе (и содержит улучшение цикла, о котором я говорил):

wchar_t *data[] = { L"foo", ... };
size_t data_count = sizeof(data) / sizeof(*data);

std::wstring result(data[0]); //Assumes you're joining at least one string.
for (std::size_t n = 1; n < data_count; ++n)
    result.append(L", ").append(data[n]);
-2
ответ дан 3 September 2019 в 00:02
поделиться

Есть ли в вашей системе wsprintf () ? Пример:

wchar_t *a = { L"foo", L"bar" };
wchar_t joined[1000];

wsprintf(joined, "%S, %S", a[0], a[1])
0
ответ дан 3 September 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: