我在检查字符串中的特定字符时遇到了一些困难。该函数的要求是检查以确保“所有字符(第一个除外)是小写,空格或标点符号(仅';'或',')”我还必须确保C-String中的最后一个字符是一个!或者a。
这就是我所拥有的。
bool isItSentence(const char* s)
{
int x = strlen(s);
for (int c = 0; s[c] != '\0'; c++)
{
if (!isupper(s[0])) return false;
if (isupper(s[c]) && c > 0) return false;
if (s[c] != ' ' && s[c] != ';' && s[c] != ',' && !islower(s[c])) return false;
}
if (s[x - 1] != '.' && s[x - 1] != '!') return false;
return true;
}
int main()
{
std::string str = "Smelly.";
std::cout << isItSentence(str.c_str()) << std::endl;
system("pause");
}
然而,我一直认为这不是一句话,即使它应该是。关于我如何解决这个问题的任何建议?
答案 0 :(得分:0)
问题似乎正在发生,因为你从索引0循环并检查第一个字符应该是大写,在后面的语句中,你再次检查它应该是小写。
if (!isupper(s[0])) return false;
以后
if (s[c] != ' ' && s[c] != ';' && s[c] != ',' && !islower(s[c])) return false;
在第一次迭代期间,当c等于0时,您基本上检查第一个字符既不应该是大写也不是小写,并且您将得到错误,因为其中一个将始终为false。以下代码应该这样做。
bool isItSentence(const char* s)
{
int x = strlen(s);
if (!isupper(s[0])) return false;
if (s[x - 1] != '.' && s[x - 1] != '!') return false;
for (int c = 0; c < x - 1; c++)
{
if (isupper(s[c]) && c > 0) return false;
if (s[c] != ' ' && s[c] != ';' && s[c] != ',')
if(!islower(s[c]) && c!= 0)
return false;
}
return true;
}
int main()
{
std::string str = "Smelly.";
std::cout <<" This is "<<isItSentence(str.c_str()) << std::endl;
system("pause");
}
希望它有所帮助!!