初学C ++学生,这是第一个编程课。我正在尝试整理一个程序,以确定字符串是否全部小写。我得到了下面的代码。但是,我需要考虑空格“”。如果用户输入的字符串中有空格,则程序假定返回的不是全部小写。例如:
输入:abc def return:字符串不是小写。您是否有任何人如此善意地建议在下面的代码中考虑这一点的最佳方法是什么?
注意:我知道我已经“包含”了一些额外的头文件,但这是因为这将成为另一个程序的一部分,这只是一个让事情运行的摘录。
非常感谢你们所有人!
#include <fstream>
#include <iostream>
#include <string>
#include <cstdlib>
#include <algorithm>
#include <cctype>
#include <iomanip>
using namespace std;
bool die(const string & msg);
bool allLower(const string & l);
int main() {
string l;
cout << "\nEnter a string (all lower case?): ";
cin >> l;
if (allLower(l) == true)
{
cout << "The string is lower case." << endl;
}
else
{
cout << "The string is not lower case." << endl;
}
}
bool allLower(const string & l) {
struct IsUpper {
bool operator()(int value) {
return ::isupper((unsigned char)value);
}
};
return std::find_if(l.begin(), l.end(), IsUpper()) == l.end();
}
bool die(const string & msg){
cout << "Fatal error: " << msg << endl;
exit(EXIT_FAILURE);
}
答案 0 :(得分:0)
你可以使用一个好的旧时尚圈。
bool allLower(const std::string & l)
{
for(unsigned int i = 0; i < l.size(); i++)
{
if(l[i] == ' ')
{
return false;
}
else if(isalpha(l[i]))
{
if(isupper(l[i]))
return false;
}
}
return true;
}
请注意,如果您使用&#34; 2&#34;它会回归真实。如果您愿意,可以添加一个返回false的最终else语句。
答案 1 :(得分:0)
在使用std :: isupper()或std :: islower()检查字符串中的所有字母是否为大写/小写之前,您可以使用函数std :: isalpha()检查字符是否为字母。等等
答案 2 :(得分:0)
基于范围的for循环比指数IMO
更清晰bool allLower(const std::string &l)
{
for (auto c : l)
{
if ((c == ' ') ||
(std::isalpha(c) && std::isupper(c)))
{
return false;
}
}
return true;
}