Преобразуйте число в строку с указанной длиной в C++

Сравнение 2 массивов:

var arr1 = [1,2,3];
var arr2 = [1,2,3];

function compare(arr1,arr2)
{
  if((arr1 == arr2) && (arr1.length == arr2.length))
    return true;
  else
    return false;
}

вызывающая функция

var isBool = compare(arr1.sort().join(),arr2.sort().join());
42
задан Brian R. Bondy 2 November 2008 в 08:50
поделиться

7 ответов

или использование stringstreams:

#include <sstream>
#include <iomanip>

std::stringstream ss;
ss << std::setw(10) << std::setfill('0') << i;
std::string s = ss.str();

я скомпилировал информацию, которую я нашел на arachnoid.com , потому что мне нравится безопасный с точки зрения типов способ iostreams больше. Кроме того, можно одинаково использовать этот код любого другого потока вывода.

58
ответ дан Ivan Mushketyk 4 August 2019 в 19:35
поделиться
char str[7];
snprintf (str, 7, "%06d", n);

См. snprintf

13
ответ дан Mateus Rodrigues de Morais 4 August 2019 в 19:35
поделиться

Одна вещь, что Вы можете , хочет знать, потенциал, блокирующий, который может продолжиться, когда Вы используете эти stringstream подход. В STL, который поставляет с Visual Studio 2008, по крайней мере, существует много блокировок, вынутых и выпущенных, поскольку различная информация о локали используется во время форматирования. Это, или не может, может быть проблема для Вас в зависимости от того, сколько потоков Вы имеете, который мог бы одновременно преобразовывать числа в строки...

sprintf версия не берет блокировок (по крайней мере, согласно контрольному инструменту блокировки, который я разрабатываю в данный момент...), и так могло бы быть 'лучше' для использования в параллельных ситуациях.

я только заметил это, потому что мой инструмент недавно выложил блокировки 'локали', как являющиеся среди наиболее спорившего для, привязывает мою систему сервера; это стало определенным удивлением и может заставить меня пересматривать подход, который я проявлял (т.е. попятитесь к sprintf от stringstream)...

8
ответ дан Len Holgate 4 August 2019 в 19:35
поделиться

stringstream сделает (, как xtofl указал ). формат Повышения является более удобной заменой для snprintf.

3
ответ дан Community 4 August 2019 в 19:35
поделиться

Этот метод не использует потоки, ни sprintf. Кроме наличия проблем блокировки, потоки подвергаются производительности наверху, и действительно излишество. Для потоков издержки прибывают из потребности создать потоковый буфер и пар. Для sprintf издержки прибывают из необходимости интерпретировать строку формата. Это работает, даже когда n отрицателен или когда строковое представление n более длительно, чем len. Это - Быстрое решение.

inline string some_function(int n, int len)
{
    string result(len--, '0');
    for (int val=(n<0)?-n:n; len>=0&&val!=0; --len,val/=10)
       result[len]='0'+val%10;
    if (len>=0&&n<0) result[0]='-';
    return result;
}
3
ответ дан sep 4 August 2019 в 19:35
поделиться

Существует много способов сделать это. Самое простое было бы:

int n = 999;
char buffer[256]; sprintf(buffer, "%06d", n);
string str(buffer);
3
ответ дан Pramod 4 August 2019 в 19:35
поделиться

sprintf является подобным C способом сделать это, которое также работает в C++.

В C++, комбинация stringstream и потокового выходного форматирования (см. http://www.arachnoid.com/cpptutor/student3.html ) сделает задание.

1
ответ дан Chris Johnson 4 August 2019 в 19:35
поделиться
Другие вопросы по тегам:

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