如果字符串在C ++中只包含字母字符,如何检查字符串

时间:2017-07-20 03:12:49

标签: c++ string boolean

我正在为作业编写程序。部分原因是我需要验证某个字符串,因此它只包含字母字符,但我无法弄明白。 这是我用来尝试编写验证器的测试代码。

#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修复缩进)

3 个答案:

答案 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()