检查用户是否在数组中键入辅音

时间:2017-09-16 12:26:03

标签: c++ arrays

好的,这是我的代码:

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

char arr[] = {'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'};
int y = 0;
string x;
const char* z;

int main()
 {
cin >> x;

z = x.c_str();

if (x.length() == 1)
{
for (y == 0; y <= 20; y++)
    {
    if (*z == arr[y])
        {
        cout << "Consonant" << endl;
        break;
        }
    else
        {
        cout << "Not a consonant" << endl;
        break;
        }
    }
}
}

所以这应该告诉我,我输入的字符是否是辅音,但问题是它告诉我只有当我输入“b”时它才是辅音,然后如果我输入该数组中的所有其他元素它会告诉我我“不是辅音”。

我不知道如何解决这个问题,我认为问题是if(* z == arr [y]),例如“c”是数组中的第二个元素,因为y = 0程序将检查它是否为“b”,然后y = 1并且应检查“c”,但程序检查“b”然后进入“else”并告诉我它不是辅音,然后程序结束

我对如何使这项工作一无所知。

1 个答案:

答案 0 :(得分:0)

从技术和逻辑上讲,您的程序存在一些问题。

技术问题

如果您使用的是C ++,请避免使用已被C ++功能替换的C功能,即,当您可以使用C ++ std::string时,不要使用C字符串。

如果你有使用C数组的冲动,那么std::vector是更好的选择。

下一个问题是你for - 循环。了解=(作业)和==(相等)之间的区别。 y==0是一个返回true y等于0false的表达式。 y=0指定y0。在你的for - 循环中,你想要做后者。

逻辑问题

问问自己想达到什么目标?以下是您要做的事情:

  1. 获取用户输入的字符。
  2. 检查此字符是否为辅音。
  3. 输出相应的消息。
  4. 你的代码设计很差,从第1点开始:如果你只是在字符中插入,你为什么要让用户输入一个字符串(因为你正在测试字符串的长度是1并想要将它与一个数组相比较字符)?

    这是你最大的逻辑问题:在每个循环步骤中,你测试输入是否等于一个字符。如果不是,则输出“Not a consonant”并退出循环。我们来调查h

    的输入
    • 第一次循环执行:h是否等于b? - &GT;不 - &gt; “没有辅音”并离开循环

    考虑这种方法,避免使用C函数并解决您的问题:

    编辑:由于编译我的解决方案时出现问题,我添加了一个不使用C ++ 11功能的版本:

    <强> C ++ 11

    #include <iostream> /* std::cout, std::cin */
    #include <vector>   /* std::vector */
    
    int main()
    {
        std::vector<char> consonants {'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 
                                      'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 
                                      'x', 'y', 'z'};
        char c;
    
        std::cin >> c;
    
        for(const auto& letter: consonants){
            if(c == letter){
                std::cout << "Consonant" << std::endl;
                return 0;
            }
        }
    
        std::cout << "Not a consonant" << std::endl;
    }
    

    使用-std=c++11标志进行编译。

    经典解决方案

    #include <iostream> /* std::cout, std::cin */
    #include <vector>   /* std::vector */
    
    int main()
    {
        const char arr[] = {'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 
                            'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 
                            'x', 'y', 'z'};
    
        std::vector<char> consonants(arr, arr+sizeof(arr)/sizeof(arr[0]));
    
        char c;
    
        std::cin >> c;
    
        for(int i=0;i<consonants.size();i++){
            if(c == consonants[i]){
                std::cout << "Consonant" << std::endl;
                return 0;
            }
        }
    
        std::cout << "Not a consonant" << std::endl;
    }