#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
Если есть вероятность, что ваша входная строка не так хорошо сформирована, вам нужно добавить некоторое защитное кодирование.