преобразование символьного значения в целочисленное значение

#c

#c

Вопрос:

здесь, когда я когда-либо нахожу ‘h’, мне нужно получить доступ к значениям между p и h, т.е. 123, и я хочу, чтобы оно имело значение int и сохраняло его в значении 123 как я могу это сделать, может ли кто-нибудь сказать мне логику, этот код, который я написал, не работает и какдля копирования значений при увеличении указателя

     main()
        {
            char *ptr1 = "p123h12";
            int value;
            while(*ptr1!= '')
            {
                if(*ptr1 == 'h')
                {
                value = (int)atoi(ptr1);
                printf("%dn", value);
                }
            ptr1  ;
            }

        }
  

Ответ №1:

С помощью sscanf:

 int value;
sscanf (ptr1,"p%dh12",amp;value);
  

Обновить

 int i,j;
int values[MAX_VALUES];
int startIdx = -1;
char *ptr1 = "p123hxxxxp124hxxxxp123145hxxxx";
char buffer[16];
for(i=0,j=0; i<strlen(ptr1);i  )
{
    if(startIdx>=0 amp;amp; ptr[i] == 'h')
    {
        strncpy(buffer,ptr1 startIdx,i-startIdx 1);
        buffer[i-startIdx 1]='';
        sscanf (buffer,"p%dh",amp;(values[j  ]));
        startIdx = -1;
    }
    else if(ptr[i] == 'p')
    {
        startIdx = i;
    }
}    
  

Комментарии:

1. я не могу использовать sscanf, я должен обобщить его, поскольку я могу получить ввод как p1hp123h.каждый раз, когда мне приходится принимать значения между p и h…so приходится использовать циклы while и некоторые условия

Ответ №2:

Вот хорошая возможная отправная точка:

 #include <stdio.h>
#include <ctype.h>

int main (void) {
    char *p, *str = "p123h12p97h62p32h";
    int accum = 0;

    // Process every character.

    for (p = str; *p != ''; p  ) {
        // 'p' resets the accumulator.
        // 'h' outputs the accumulator.
        // Any digit adjusts the accumulator.

        if (*p == 'p')       accum = 0;
        if (*p == 'h')       printf ("Processing %dn", accum);
        if (isdigit (*p))    accum = accum * 10   *p - '0';
    }

    return 0;
}
  

Это будет работать нормально, если ваша входная строка соответствует указанному вами формату, выводя:

 Processing 123
Processing 97
Processing 32
  

Если есть вероятность, что ваша входная строка не так хорошо сформирована, вам нужно добавить некоторое защитное кодирование.