Есть ли в строке хоть один символ?
Вопрос следующий
Допустим, имеется строка
Код:
CString str = " ";
В ней содержатся несколько пробелов и табуляций
Необходимо написать функцию, которая проверяла бы, есть ли в ней хотя бы 1 символ
То есть тут, как я понимаю, есть 2 пути
- собрать в символный массив все символы и проверять, есть ли в str хотя бы 1 символ из символьного массива
- сделать массив из символа пробела и табуляции и проверять, содержится ли в str что-то, отличное от пробела и табуляции
Может быть, у кого-то будут какие-то другие предложения по поводу решения данной задачи?
Потому что эти черезчур уж тривиальные)
Код:
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);
}
CAtlRegExp<> re;
CAtlREMatchContext<> context;
re.Parse("{[^ \t]}");
re.Match(str, &context);
CAtlREMatchContext<>::MatchGroup res;
context.GetMatch(0, &res);
return (res != NULL);
}
Это как вариант.
Код:
#include <atlrx.h>
почему-то пишет, что cannot open source file "atlrx.h"
Сделай trim() и проверь длину строки после этого.
Код:
//процедура, проверяющая строку на пустоту
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;
}
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. всем спасибо за советы
Функция trim(), кажется, удаляет лишние символы?
бывают ещё rtrim() и ltrim(), удаляющие пробельные символы соответственно в начале строки, и в конце строки.
Код:
#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();
}
#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