我正在为作业编写程序。部分原因是我需要验证某个字符串,因此它只包含字母字符,但我无法弄明白。 这是我用来尝试编写验证器的测试代码。
#include <cstring>
#include <iostream>
#include <string>
using namespace std;
bool isValidName(string str);
string str[20];
main() {
cout << "enter name\n ";
getline(cin, str[1]);
isValidName(str[1]);
cout << isValidName << endl;
system("pause");
}
bool isValidName(string str) {
for (int i = 0; i < (int)str.length(); i++) {
if (!isalpha(str[i])) {
return false;
break;
}
return true;
break;
}
}
我把它放在什么样的角色并不重要,它总会返回1:o(
(感谢Paul Rooney修复缩进)
答案 0 :(得分:2)
编写验证过程的另一种方法是:
bool isValidName(const std::string& str)
{
return std::all_of(str.begin(), str.end(), isalpha);
}
在你的功能中:
bool isValidName(string str)
{
for(int i=0;i<(int)str.length();i++)
{
if (!isalpha(str[i]))
{
return false;
break; // breaking here is useless, you've already returned.
}
return true; // this is not in the right spot. you return true
// if the first character is alpha !!
}
return true; // <-- should be here.
}
正确的缩进使这些错误很容易被发现。
答案 1 :(得分:0)
其中一个问题是你没有打印函数的返回,你正在打印函数变量。 cout&lt;&lt; isValidName&lt;&lt; ENDL; //错
你也已经在第一次角色检查中回来了,我希望下面的代码可以帮助你
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
bool isValidName(string str);
string str;
main(){
cout << "enter name\n ";
getline(cin, str);
cout << isValidName(str) << endl;
}
bool isValidName(string str) {
for(int i=0;i<(int)str.length();i++) {
if (!isalpha(str[i])) {
return false;
}
}
return true;
}
感谢鲁尼
答案 2 :(得分:0)
另一个优雅的解决方案是使用正则表达式来验证您的输入。
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
Builder.load_string('''
<MyWidget>
orientation: 'vertical'
Spinner:
id: auxlo
text: "Select"
values: ('On', 'Off')
focus: True
on_text: auxlonum.disabled = True if auxlo.text == 'Off' else False
Label:
Spinner:
id: auxlonum
text: "Select"
values: ('# 1', '# 2')
focus: True
Label:
''')
class MyWidget(BoxLayout):
pass
class TestApp(App):
def build(self):
return MyWidget()
TestApp().run()