好的,这是我的代码:
#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”并告诉我它不是辅音,然后程序结束
我对如何使这项工作一无所知。
答案 0 :(得分:0)
从技术和逻辑上讲,您的程序存在一些问题。
技术问题
如果您使用的是C ++,请避免使用已被C ++功能替换的C功能,即,当您可以使用C ++ std::string
时,不要使用C字符串。
如果你有使用C数组的冲动,那么std::vector
是更好的选择。
下一个问题是你for
- 循环。了解=
(作业)和==
(相等)之间的区别。 y==0
是一个返回true
y
等于0
,false
的表达式。 y=0
指定y
到0
。在你的for
- 循环中,你想要做后者。
逻辑问题
问问自己想达到什么目标?以下是您要做的事情:
你的代码设计很差,从第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;
}