Как преобразовать std :: string в нижний регистр?

Связь Ajax между клиентом и сервером часто включает данные в формате JSON. В то время как JSON хорошо работает для строк, чисел и логических значений, он может создавать определенные трудности для дат из-за того, как они преобразуются в ASP.NET. Поскольку у них нет специального представления для дат, они сериализуются как простые строки. В качестве решения механизм сериализации по умолчанию ASP.NET Web Forms и MVC сериализует даты в специальной форме - / Date (ticks) / - где тики - это число миллисекунд с 1 января 1970 года.

Эта проблема может быть решена двумя способами:

клиентская сторона

Преобразование полученной строки даты в число и создание объекта даты с использованием конструктора класса даты с параметрами ticks as.

function ToJavaScriptDate(value) {
  var pattern = /Date\(([^)]+)\)/;
  var results = pattern.exec(value);
  var dt = new Date(parseFloat(results[1]));
  return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();

}

серверная сторона

В предыдущем решении используется сценарий на стороне клиента для преобразования даты в объект JavaScript. Вы также можете использовать код на стороне сервера, который сериализует экземпляры .NET DateTime в выбранном вами формате. Для выполнения этой задачи вам необходимо создать свой собственный ActionResult и затем сериализовать данные так, как вы хотите.

ссылка: http://www.developer.com/net/dealing-with-json -dates-в-asp.net-mvc.html

697
задан Guy Avraham 14 June 2018 в 08:15
поделиться

2 ответа

Адаптированный от Не Так Часто Задаваемые Вопросы :

#include <algorithm>
#include <cctype>
#include <string>

std::string data = "Abc";
std::transform(data.begin(), data.end(), data.begin(),
    [](unsigned char c){ return std::tolower(c); });

Вы действительно не собираетесь уходить, не выполняя итерации через каждый символ. Нет никакого способа знать, является ли символ нижним регистром или верхним регистром иначе.

, Если Вы действительно ненавидите tolower() , вот специализированная альтернатива только для ASCII, что я не рекомендую использовать:

char asciitolower(char in) {
    if (in <= 'Z' && in >= 'A')
        return in - ('Z' - 'z');
    return in;
}

std::transform(data.begin(), data.end(), data.begin(), asciitolower);

знать, что tolower() может только сделать per-single-byte-character замену, которая является неподходящей для многих сценариев, особенно при использовании multi-byte-encoding как UTF-8.

841
ответ дан Deduplicator 14 June 2018 в 08:15
поделиться

Повышение предоставляет строковый алгоритм для этого :

#include <boost/algorithm/string.hpp>

std::string str = "HELLO, WORLD!";
boost::algorithm::to_lower(str); // modifies str

Или, для неоперативного :

#include <boost/algorithm/string.hpp>

const std::string str = "HELLO, WORLD!";
const std::string lower_str = boost::algorithm::to_lower_copy(str);
297
ответ дан Deduplicator 14 June 2018 в 08:15
поделиться
Другие вопросы по тегам:

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