Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2013, 20:15   #1
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
Восклицание Преобразование типов, получить первый символ и число, пример T256S

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

Допустим
Код:
char test[] = "T256S";

if(test[0] == "T"){
    int digit = .....
}
Компилятор ругается нехарошими словами, говорит:
main_final.c:126: warning: comparison between pointer and integer
main_final.c:126: warning: comparison with string literal results in unspecified behavior

Строка 126 это if(test[0] == "T"){

Как мне тогда с ним работать?
dem66 вне форума Ответить с цитированием
Старый 16.03.2013, 20:54   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
test[0] == 'T'
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.03.2013, 21:46   #3
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Спасибо за подсказку, PHP всетаки даёт о себе знать))
А как мне из эйтой строки получить число?

И не просто получить число а проверить есть ли в конце строки символ S и выдернуть в числовую переменную все что до него?

Код:
(int)test
не помагает
dem66 вне форума Ответить с цитированием
Старый 16.03.2013, 21:56   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
    char test[] = "T256S";
    if(test[0] == 'T')
    {
        int digit = atoi(test + 1);
        printf("%d\n", digit);
    }
    if (strchr(test, 'S'))
        printf("S found\n");
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.03.2013, 22:24   #5
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

ну с printf и я так могу, тут нужно записать в переменную а не выводить на экран
dem66 вне форума Ответить с цитированием
Старый 16.03.2013, 22:31   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Не понял.
Что нужно записать в переменную?
strchr возвращает указатель на найденный символ в строке или NULL, если не нашел.
Переменная digit содержит число из строки.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.03.2013, 22:59   #7
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

уже разобрался, немного ступил.
А можно както без atoi? Занимает очень много места.
Вот нашел кусок кода:
Код:
size_t _atoi(const char * str){
   size_t res = 0;
   for (; *str; res += *str++ - '0')
      res *= 10;
   return res;
}
Но походу он для C++

PS: пишу не для компа а для контроллера
dem66 вне форума Ответить с цитированием
Старый 16.03.2013, 23:03   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А можно както без atoi
Код:
int i=0,k=0;
for(;str[k];k++);
for(--k;k;k--) {i+=(str[k]-'0');i*=10;}
Подойдет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.03.2013, 23:06   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Ничего плюсового (относящегося к С++) в этой функции не вижу.
Другое дело, что библиотечный atoi преобразует до первого нечислового символа, а эта функция до нультерминанта (хотя, это можно исправить).

Понятно, что для контроллера нужно как можно меньше, но никаких конструктивных советов дать не могу - не писал ничего для контроллера (и вообще редко оказывался в ситуации с ограничением ресурсов).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 16.03.2013, 23:16   #10
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

После компиляции того кода что привел Stilet размер получился на 300байт больше чем с родной atoi

Так еще и результат оно выдаёт не тот что ожидалось, получается -29886.

Скажите а есть ли способ освободить память занятую переменной?
Допустим переменная test уже своё отработала и поидее она уже не нужна, знаю что в PHP такое есть, а в C не находил
dem66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
первый и последний символ в строке AndreyF Общие вопросы Delphi 10 03.08.2016 12:09
преобразование типов mego4el Помощь студентам 3 30.11.2011 04:50
Преобразование типов jungle Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 04.12.2010 19:41
Надо сложить первый символ со вторым в edit CyberDemon324 Общие вопросы Delphi 11 21.10.2009 13:23
Первый символ в Edit-e artemavd Общие вопросы Delphi 2 24.09.2009 21:35