LINUX.ORG.RU

int и char


0

0

Народ, у мя есть строка char *c; с содержимым(всмысле указывающее на) "некий текст]123[некий текст" Как мне выудить число между ']' и '[' в переменную int i;? При этом число может быть любое (напирмер, не 123, а 1 или 55), и при это я не знаю положение символов ']' и '['?

anonymous

РЕ

Что-нибудь вроде:

char * beg, * end, *str;
int res;

beg = strchr (s, ']');
end = strchr (s, '[');
str = (char *)malloc (end-beg);
strncpy (str, beg, end-beg-1);
str[end-beg] = 0;
res = atoi (str);
free(str);

return res;

Ну и плюс желательно обработку ошибок добавить ;)

Murr ★★
()

int n=0;
while(char cc=c;*cc!=']';cc++) {} n=atoi(cc+1);

можно в {} добавить if(*cc=='\n') break;

grustnoe ★★
()
Ответ на: РЕ от Murr

Сойдемся на int n=atoi(strchr(s,']')+1); ? :) Правда если ] нет - упадет с сегфолтом. это фиксится добавлением еще одной строки.

grustnoe ★★
()
Ответ на: комментарий от anonymous

Может, так?

int find_number(char * str) {
  char * p = strpbrk(str, "[]", *pp;

  while(p) {
    if(*p == ']') {
      if(!(pp = strpbrk(p, "[]")))
         return NOT_FOUND;
      else if(*pp == '[') // ok
         return atoi(p+1);
      else
         p = pp;
    }
  }

  return NOT_FOUND;
}




anonymous
()
Ответ на: комментарий от josephson

Предложение снимается: работает только если есть пробел перед 123 и нет пробелов в тексте.

josephson ★★
()

по мне было бы что то типа:

char *s = str;
while (*s && *s++ != ']')
;
n = atoi(s);

это не предусматривает случая с str вида "aoeu]aoeu]123[aeou" зато
должно работать со статик строками :)

lg ★★
()

Стопроцентно работает при любых условиях : char *str = "aqgdgdf[345]fhdtererer"; char buf[255]; int i = 0; int j = 0; for (i = 0; i < (int)strlen(str); i++) { if ((str[i] == '[') && (isdigit(str[++i]) != 0)) { while (str[i] != ']') { buf[j] = str[i]; i++; j++; } } } buf[j] = '\0'; int count = atoi(buf);

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.