检查特定字符
Checking for specific chars
我在检查字符串中的特定字符时遇到一些困难。该函数的要求是检查以确保“所有字符(第一个字符除外)都是小写、空格或标点符号(仅‘;’或‘,’)” I还必须确保 C 字符串中的最后一个字符是 !或 .
这是我的。
bool isItSentence(const char* s)
{
int x = strlen(s);
for (int c = 0; s[c] != '[=10=]'; 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 开始循环并检查第一个字符是否应为大写,而在后面的语句中,您再次检查它是否应为小写。
if (!isupper(s[0])) return false;
以后
if (s[c] != ' ' && s[c] != ';' && s[c] != ',' && !islower(s[c])) return false;
在第一次迭代期间,当 c 等于 0 时,您基本上是在检查第一个字符既不应该是大写也不是小写,并且您得到 false,因为其中一个总是 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");
}
希望对您有所帮助!!
我在检查字符串中的特定字符时遇到一些困难。该函数的要求是检查以确保“所有字符(第一个字符除外)都是小写、空格或标点符号(仅‘;’或‘,’)” I还必须确保 C 字符串中的最后一个字符是 !或 .
这是我的。
bool isItSentence(const char* s)
{
int x = strlen(s);
for (int c = 0; s[c] != '[=10=]'; 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 开始循环并检查第一个字符是否应为大写,而在后面的语句中,您再次检查它是否应为小写。
if (!isupper(s[0])) return false;
以后
if (s[c] != ' ' && s[c] != ';' && s[c] != ',' && !islower(s[c])) return false;
在第一次迭代期间,当 c 等于 0 时,您基本上是在检查第一个字符既不应该是大写也不是小写,并且您得到 false,因为其中一个总是 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");
}
希望对您有所帮助!!