Как я могу разделить строку в 3 шортах, а остальные в одну строку (эта строка в виде пробелов в нем) в C? - PullRequest
2 голосов
/ 08 октября 2011

Как я могу разделить строку с пробелами между 3 шортами и между остальной частью строки на 4 разные строки.

Пример:

"123 402 10 aaa bbb cc".

Я просто хочу

 short i=123;
 short j=402;
 short y=10;
 char * c="aaa bbb cc".

Я пытался использовать sscanf для этого, но я не могу понять, как заставить эту последнюю строку работать из-за пробела.

Ответы [ 3 ]

2 голосов
/ 08 октября 2011

Это не так сложно:

#include <stdio.h>

int main() {
  short i, j, y;
  char text[80];

  if (sscanf("123 402 10 aaa bbb cc\nsecond line", "%hd %hd %hd %79[^\n]", &i, &j, &y, text) == 4) {
    printf("success: i=%d, j=%d, y=%d, text=%s\n", i, j, y, text);
  }
  return 0;
}

Обратите внимание, что вы должны выделить буфер для строки самостоятельно и убедиться, что переполнение буфера не происходит.

2 голосов
/ 08 октября 2011

Один из способов сделать это может быть:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const char* str = "123 402 10 aaa bbb cc";
    short i,j,y;
    char c[256];
    if (sscanf(str, "%hd %hd %hd %255[^\n]", &i, &j, &y, c) == 4) {
        printf("i=%hd j=%hd y=%hd c=\"%s\"\n", i, j, y, c);
    }
    return 0;
}
0 голосов
/ 08 октября 2011

Вам не нужно sscanf.Вы можете использовать strchr, чтобы найти пробелы, atoi, чтобы превратить строки в целые числа, и простое назначение, чтобы превратить пробелы в конечные нули.

Вы также можете сделать это:

#include <stdio.h>
int main(void)
{
 const char *test="123 402 10 aaa bbb cc";
 short i, j, y;
 char c[128];
 sscanf(test, "%hd%hd%hd %[^\n]s", &i, &j, &y, c);
 printf("i=%d j=%d y=%d c='%s'\n", i, j, y, c);
}

Выход: i=123 j=402 y=10 c='aaa bbb cc'

...