Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Есть ли в строке хоть один символ?

5.7K
27 июля 2011 года
Lindemann66
193 / / 21.07.2011
Всем привет!
Вопрос следующий
Допустим, имеется строка
 
Код:
CString str = "        ";

В ней содержатся несколько пробелов и табуляций
Необходимо написать функцию, которая проверяла бы, есть ли в ней хотя бы 1 символ
То есть тут, как я понимаю, есть 2 пути
  1. собрать в символный массив все символы и проверять, есть ли в str хотя бы 1 символ из символьного массива
  2. сделать массив из символа пробела и табуляции и проверять, содержится ли в str что-то, отличное от пробела и табуляции

Может быть, у кого-то будут какие-то другие предложения по поводу решения данной задачи?
Потому что эти черезчур уж тривиальные)
278
27 июля 2011 года
Alexander92
1.1K / / 04.08.2008
CAtlRegExp и регулярные выражения.

 
Код:
bool ContainsCharacter(const CString& str) {
   CAtlRegExp<> re;
   CAtlREMatchContext<> context;
   re.Parse("{[^ \t]}");
   re.Match(str, &context);
   CAtlREMatchContext<>::MatchGroup res;
   context.GetMatch(0, &res);
   return (res != NULL);
}


Это как вариант.
5.7K
27 июля 2011 года
Lindemann66
193 / / 21.07.2011
 
Код:
#include <atlrx.h>

почему-то пишет, что cannot open source file "atlrx.h"
4
27 июля 2011 года
mike
3.7K / / 01.10.2002
Сделай trim() и проверь длину строки после этого.
5.7K
27 июля 2011 года
Lindemann66
193 / / 21.07.2011
В-общем, так решил проблему
Код:
//процедура, проверяющая строку на пустоту
bool ContentParser::IsEmptyStr(CString str) {
    CString forCompare(" \t\n\r");
    for (int i = 0; i < str.GetLength(); i++) {
        //если в строке есть хотя бы 1 символ, отличный от табуляции и пробела, то строка - не пустая
        if (forCompare.Find(str) == -1) {
            return false;
        }
    }
    return true;
}


может, кому-то это пригодится
P.S. всем спасибо за советы
72K
06 августа 2011 года
Kopral
12 / / 01.07.2011
Функция trim(), кажется, удаляет лишние символы?
8
06 августа 2011 года
mfender
3.5K / / 15.06.2005
trim() удаляет пробельные символы (пробелы, табуляции, переносы строк) в начале и в конце строки. Таким образом, если сделать как посоветовал mike, если в строке есть хоть один не пробельный символ, он останется, что и требовалось получить, а если строка состоит сплошь из x20, x10, x13 и т.п. - не останется ничего.

бывают ещё rtrim() и ltrim(), удаляющие пробельные символы соответственно в начале строки, и в конце строки.
341
07 августа 2011 года
Der Meister
874 / / 21.12.2007
STL:
Код:
#include <string>
#include <locale>
#include <functional>

using namespace std;

template <class CharType>
class Predicate : public unary_function<CharType, bool> {
private:
    const locale & loc;
public:
    Predicate(const locale & loc) : loc(loc) {}
    bool operator()(CharType ch) {
        return !isspace(ch, loc);
    }
};

template <typename CharType>
bool ContainsPrintable(const basic_string<CharType> & str, const locale & loc) {
    basic_string<CharType>::const_iterator i =
        find_if(str.begin(), str.end(), Predicate<CharType>(loc));

    return i != str.end();
}

CStringT<char> использует _ismbcspace вместо std::isspace
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог