Как найти длину LPCSTRASSE

Я всегда находил Hibernate немного сложным и трудным для изучения. Но так как JPA (Java Persistence API) и EJB (Enterprise Java Beans) 3.0 уже некоторое время стали намного проще, я предпочитаю комментировать свои классы для создания отображений с помощью JavaDoc или XML. Проверьте поддержку в Hibernate . Дополнительным бонусом является то, что можно (но не без усилий) изменить структуру базы данных позже, если это необходимо. Я использовал OpenJPA с отличными результатами.

В последнее время я все больше и больше использую JCR (Java Content Repository). Мне нравится, как мои модули могут совместно использовать одно хранилище данных и что я могу позволить структуре и свойствам развиваться. Мне гораздо проще работать с узлами и свойствами, чем сопоставлять мои объекты с базой данных. Хорошей реализацией является Jackrabbit .

Что касается Spring, он имеет много функций, которые мне нравятся, но количество XML, необходимое для настройки, означает, что я никогда не буду его использовать. Вместо этого я использую Guice и очень люблю его.

В заключение я бы показал вашим сомневающимся разработчикам, как Hibernate облегчит их жизнь. Что касается Spring, я бы серьезно проверил, является ли Guice жизнеспособной альтернативой, а затем попытался бы показать, как Spring / Guice делает разработку лучше и проще.

10
задан Zain Rizvi 13 October 2009 в 18:15
поделиться

7 ответов

Разве это не то, что делает Стрлен?

13
ответ дан 3 December 2019 в 13:23
поделиться

Вы можете использовать strtol и использовать возвращенный endptr , чтобы проверить, является ли это концом строки (0 байт).

Подсчет будет не обязательно быть точным. «00» приведет к 0, но 0 состоит из одной цифры, а исходная строка имеет длину 2.

8
ответ дан 3 December 2019 в 13:23
поделиться

Функция strlen () - это то, что вам нужно.

Пример использования:

size_t len = strlen( szNumber );
5
ответ дан 3 December 2019 в 13:23
поделиться
LPCSTR lpText = "test";
long lTextLen = CString(lpText).GetLength();
1
ответ дан 3 December 2019 в 13:23
поделиться

Нет.

Вот как вы находите длину c-строки. Вы можете использовать strlen , но он все равно должен пройти вниз по всей строке и подсчитать количество символов перед '\ 0' .

2
ответ дан 3 December 2019 в 13:23
поделиться

Поговорим о производстве большего количества тепла, чем света ... :) Прекратите использовать «атой», и это решит большинство ваших проблем. 'atoi' - мертвая функция, не имеющая практического значения. Правильный способ преобразовать строковое представление в число - это функции из группы 'strto ...' ('strtol', 'strtoul' и т. Д.). Эти функции вернут вам достаточно информации, чтобы сразу определить, произошла ли ошибка преобразования.

2
ответ дан 3 December 2019 в 13:23
поделиться

Я бы поступил немного по-другому - инициализировал строковый поток вводом, прочитал int, затем проверил, пуст ли поток:

#include <sstream>
#include <iostream>

typedef char const *LPCSTR;

template <class T>
bool check_read(LPCSTR input, T &val) { 
    std::istringstream reader(input);

    reader >> val;
    char ch;
    if (reader >> ch) {
        std::cerr << "\nUnconverted character: " << ch << std::endl;
        return false;
    }
    return true;
}

int main() { 
    LPCSTR inputs[] = {"12345", "54321a"};
    int a;

    for (int i=0; i<2; i++) {
        check_read(inputs[i], a);
        std::cout << "Converted: " << a << std::endl;
    }
    return 0;
}

Другой разумной возможностью было бы strtol или one своих кузенов. Они возвращают указатель на первый непреобразованный символ (если есть), поэтому они прямо говорят вам, что было преобразовано, а что нет. Они быстрее, но, как правило, менее гибки, чем потоки - например, если вы хотите прочитать число с плавающей запятой, приведенный выше check_read будет работать как есть, но что-то, использующее strtol, должно быть переписано.

Еще больше возможностей, вы можете рассмотреть Boost lexical_cast (который упакован немного иначе, но очень похож на код выше).

0
ответ дан 3 December 2019 в 13:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: