因此,目标是检查C样式字符串是否以句点或感叹号结尾。但是,出于某种原因,我一直都是假的。
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[x-1] != '.') return false;
if (s[x-1] != '!') return false;
}
return true;
}
int main()
{
std::string str = "Smelly.";
reverse(str.c_str());
std::cout << isItSentence(str.c_str()) << std::endl;
std::cout << strlen(str.c_str()) << std::endl;
system("pause");
到目前为止我所拥有的。但是当我添加最后一个if语句来处理感叹号时,它返回零。有什么建议吗?
答案 0 :(得分:1)
首先,注意s[x-1]
是循环不变量,因此您宁愿将其移出for
循环
if (s[x-1] != '.') return false;
if (s[x-1] != '!') return false;
这总是假的(char不能 一个点和一个解释标记)。 测试应该是
if (s[x-1] != '.' && s[x-1] != '!') return false;