2014-03-24 2 views
0

У меня проблема. Предположим, у меня естьКак читать число между двумя пробелами?

char a[50]={" 99 98 100 97 101 "}; 

и Я хочу еще один массив строки, которая дает мне значения, как это:

char b[50]={"bcdae"}; 

то, что делать?

(ASCII значение = 97 и так далее)

+2

Используйте sscanf и sprintf в цикле. –

ответ

1
#include <stdio.h> 

int main() { 
    char a[50]={" 99 98 100 97 101 "}; 
    char b[50]={0}; 
    char *p = b; // p now points to b 
    int i, num, pos = 0; 

    // %d returns each number 
    // %n returns the number of bytes consumed up to that point 

    while(sscanf(a + pos, "%d%n", &num, &i)==1) 
    { 
     *p++ = (char)num; // b[0]..b[n] are set to num which is cast into a char 
     pos += i; // increment the position by bytes read 
    } 
    printf("%s\n", b);//cbdae 
    return 0; 
} 
-1

"bcdae" не что иное, как массив чисел: [99, 98, 100, 97, 101, 0]. В конце концов, в памяти компьютера нет «букв», просто цифры. Последний номер 0 обозначает конец строки.

Итак, ваша задача, похоже, состоит в том, чтобы многократно считывать число из строки (проверьте функцию scanf) и поместив прочитанное значение в массив чисел.


Подсказки: Изучение количества символов вы читаете при анализе номера может быть полезно - проверить Get number of characters read by sscanf?

+0

Psh, в памяти компьютера нет номера, только электронные заряды и их отсутствие. – SGM1

1

Следующая инициализация не кажется, что то, что вы имели в виду (хотя они компиляция):

char a[50] = {" 99 98 100 97 101 "}; 
char b[50] = {"bcdae"}; 

Если вы имели в виду:

char a[50] = {99, 98, 100, 97, 101}; 
char b[50] = "bcdae"; 

Тогда содержимое двух массивов идентично.


Если вы имели в виду:

char a[50] = {99 , 98 , 100, 97, 101}; 
char b[50] = {'b', 'c', 'd', 'a', 'e'}; 

Затем содержимое двух массивов идентичны.


Если вы имели в виду:

char a[50] = " 99 98 100 97 101 "; 
char b[50] = "bcdae"; 

что эквивалентно тому, что вы в курсе, то вы можете использовать это:

#include "string.h" 

void a2b(char a[],char b[]) 
{ 
    int i = 0, j; 
    char* pch = strtok(a," "); 
    while (pch != NULL) 
    { 
     b[i] = 0; 
     for (j=0; pch[j]!=0; j++) 
     { 
      b[i] *= 10; 
      b[i] += pch[j]-'0'; 
     } 
     i++; 
     pch = strtok(NULL," "); 
    } 
    b[i] = 0; 
} 

Пожалуйста, обратите внимание, однако, что приведенный выше код изменяет содержимое первого массива.

+0

'char a [50] = {" 99 98 100 97 101 "};' действительно. _ Массив типа символа может быть инициализирован литералом строки символов, необязательно , заключенным в фигурные скобки. Последовательные символы символьного строкового литерала (включая завершающий нулевой символ, если есть место или массив неизвестного размера) инициализируют элементы массива ._ 6.7.8 Initializaiton 14 – BLUEPIXY

+0

@BLUEPIXY: Спасибо. 1. Он все еще «пахнет», как OP, означает один из первых двух вариантов, упомянутых выше. 2. Третий вариант, упомянутый выше, дает решение в случае, если это действительно то, что означает OP. –

+0

_ Следующие инициализации не кажутся правильными. Пожалуйста, удалите или измените. Кроме того, смысл ясно из того, что мой ответ уже принят. – BLUEPIXY

Смежные вопросы