Преобразуйте массив целых чисел в строку - PullRequest
1 голос
/ 13 января 2010

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

Пример:

int IArray = {1, 2, 3};
// should be coverted into "123"

Доступна ли прямая функция? Если нет, то как мне преобразовать массив целых чисел в строку?

Ответы [ 6 ]

5 голосов
/ 13 января 2010

Для этого нет прямой функции.

Вам придется использовать sprintf .

2 голосов
/ 13 января 2010

Нет ничего в C stdlib, чтобы сделать это, но нетрудно написать строковые манипуляции:

#include <assert.h>

int transform_ints_to_string(int const* data, int data_length,
                             char* output, int output_length)
{
  // if not enough space was available, returns -1
  // otherwise returns the number of characters written to
  // output, not counting the additional null character

  // precondition: non-null pointers
  assert(data);
  assert(output);
  // precondition: valid data length
  assert(data_length >= 0);
  // precondition: output has room for null
  assert(output_length >= 1);

  int written = 0;
  for (; data_length; data_length--) {
    int length = snprintf(output, output_length, "%d", *data++);
    if (length >= output_length) {
      // not enough space
      return -1;
    }
    written += length;
    output += length;
    output_length -= length;
  }
  return written;
}

Пример:

int main() {
  char buf[100] = "";
  int data[] = {1, 2, 3};
  if (transform_ints_to_string(data, 3, buf, sizeof buf) == -1) {
    puts("not enough room");
  }
  else {
    printf("%s\n", buf);
  }
  return 0;
}
1 голос
/ 13 января 2010

большинство компиляторов c и c ++ поддерживают функцию itoa, которая преобразует int в char *, или вы можете использовать sprintf для этого. Следующим шагом является объединение всех строк в одну строку, вы можете использовать strcat. Перейдите по ссылкам, вы найдете примеры для этих двух функций.

1 голос
/ 13 января 2010

Имеется ли прямая функция? можно использовать?

NO

0 голосов
/ 13 января 2010

int IArray = {1, 2, 3};

Это не С!

Вы имеете в виду;

int IArray [3] = {1, 2, 3};

Вы могли бы сделать это ...

for( loop = 0 ; loop < 3 ; loop++ )
  *(((char *) IArray)+loop) = '0' + IArray[loop];

*(((char *) IArray)+loop) = 0;

printf( "%s\n", (char *) IArray );

... но я бы не стал на вашем месте: -)

0 голосов
/ 13 января 2010

Если ваша переменная IArray содержит целочисленные значения в диапазоне [0,9], то вы можете сделать что-то вроде этого (псевдокод):

string := ""
While more numbers:
    string.append(next + '0')

В C гарантируется, что '0', '1', ..., '9' имеют последовательные целочисленные значения.

Если это не то, что вам нужно, вам нужно более четко определить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...