Я пытаюсь написать некоторые функции проверки строки, такие как
проверить, является ли строка NULL, пустая или имеет только пробелы!
проверьте, является ли строка буквенно-цифровой или заглавной!
Меня интересуют только строки с строчными алфавитами из az. (VALID строки) rest Я хочу заблокировать, поэтому я написал следующие функции:
std::string isEmpty(const std::string &input){
// empty string
if (NULL ==input || input=="\0" || !input.size())
return "";
}
std::string isMalfunctioned(const std::string &input){
for (int i = 0; i < input.size(); ++i){
// string is not a-z or alphanumeric or uppercase
if ( input[i] < 'a' || input[i] > 'z'|| isalpha(input[i]) || isupper(input[i]) )
return "";
}
}
и из основной функции я просто вызываю myFunc (), используя ссылку на входную строку &он вызывает функцию проверки, написанную выше, чтобы уведомить пользователя о входящих недопустимых строках:
#include"myFunc.h"
std::string myFunc(const std::string & input){
if( isEmpty(input)== "")
std::cout<<"Empty input"<< std::endl;
if( isMalfunctioned(input)== "")
std::cout<<"malfunctioned input"<< std::endl;
return input;
}
int main(){
std::string input="1234";
std::cout << myFunc(input)<< std::endl;
return 0;
}
Мой вопрос:
- Первый, Я думаю, что мои функции проверки не являются синтетически правильными, так как я получаю ошибки времени компиляции, как показано ниже, может ли кто-нибудь помочь в этом отношении?
mismatched types ‘const __gnu_cxx::__normal_iterator<_
Iterator, _Container>’ and ‘long int’
candidate: template<class _Iterator,
class _Container> bool __gnu_cxx::operator==(const __gnu_cxx::__normal_iterator<_Iterat
or, _Container>&, const __gnu_cxx::__normal_iterator<_Iterator, _Container>&)
operator==(const __normal_iterator<_Iterator, _Container>& __lhs,
ВторойЯ думаю, мои функции проверки не полностью охватывают мою спецификациюs.Любое предложение для этого?
В-третьих, я написал несколько тестовых случаев с использованием теста Google, но не могу взаимодействовать с вышеуказанной функциональностью, Есть предложения о том, что я делаю неправильно и как исправитьих?Также приветствуются любые предложения по рефакторингу кода!
#include "myfunc.h"
#include <gtest/gtest.h>
TEST(testbundle, EmptyString){
ASSERT_EQ("", myfunc(""));
}
TEST(testbundle, Malfunctioned){
ASSERT_EQ("", myfunc("ad34534654"));
ASSERT_EQ("", myfunc("!$#sadasfd1"));
}
TEST(testbundle, LowerCase){
ASSERT_EQ("abbsbdbbdbdb", myfunc("abbsbdbbdbdb"));
}
TEST(PreliminaryTest, UpperCaseString){
ASSERT_EQ("", myfunc("ASDFFGGGHH"));
}
int main(int argc, char **argv){
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}