程序将要求用户输入必须仅由ABCD组成的strand,如果输入包含ABCD以外的字母,则必须显示错误,否则应输出“ok!”
string strand1;
again:
cout << "Enter String 1:\n";
cin >> strand1;
for (int i = 0; i <= strand1.length(); i++)
{
if (strand1.at(i) != 'A'&&strand1.at(i) != 'B'&&strand1.at(i) != 'C'&&strand1.at(i) != 'D')
{
cout << "Invalid Input";
system("cls");
goto again;
}
else
{
i++;
}
}
cout << "ok";
_getch();
return 0;
答案 0 :(得分:2)
isValidInput
。std::find_if
来执行相同操作。while
函数的main
循环中使用该函数。
bool isNotABCD(char c)
{
return !((c == 'A') || (c == 'B') || (c == 'C') || (c == 'D'));
}
bool isValidInput(std::string const& str)
{
return (std::find_if(str.begin(), str.end(), isNotABCD) == str.end());
}
int main()
{
string strand1;
cout << "Enter String 1:\n";
while ( cin >> strand1 && !isValidInput(strand1) )
{
cout << "Invalid Input";
system("cls");
cout << "Enter String 1:\n";
}
cout << "ok";
}
<强>更新强>
您也可以使用更简单的isValidInput()
版本,感谢@Blastfurnace提供建议。
bool isABCD(char c)
{
return (c == 'A') || (c == 'B') || (c == 'C') || (c == 'D');
}
bool isValidInput(std::string const& str)
{
return (std::all_of(str.begin(), str.end(), isABCD));
}
更新2
您还可以使用更简单的isValidInput()
版本,感谢@JorenHeit提供建议。
bool isValidInput(std::string const& str)
{
return (std::find_first_not_of("ABCD") == std::string::npos);
}
答案 1 :(得分:1)
您的问题尚不清楚,但在检查您的代码后,我认为问题在于,当您应该使用i < strand1.length
时,您正在使用 class TempRecord
{
private float[] temps = new float[10] { 56.2F, 56.7F, 56.5F, 56.9F, 58.8F,
61.3F, 65.9F, 62.1F, 59.2F, 57.5F };
private int vps;
public float this[int index]
{
get
{
return temps[index];
}
set
{
temps[index] = value;
}
}
public int mava
{
set
{
vps = value;
}
get
{
return vps + vps;
}
}
}
class MainClass
{
static void Main()
{
TempRecord tempRecord = new TempRecord();
tempRecord.mava = 4;
// Usually If I Need Accces Class properties , Than I Used To Write objectname.properties name(tempRecord) ,
//But How Come Here It Work's Without Writing objectname.properties name
tempRecord[3] = 58.3F; // Here Without Writing objectname.properties name
tempRecord[5] = 60.1F; // here Without Writing objectname.properties name
for (int i = 0; i < 10; i++)
{
System.Console.WriteLine("Element #{0} = {1}", i, tempRecord[i]);
}
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}
。
您正在使用的循环条件将检查索引超出字符串的范围。另外,你不应该在else语句中递增i,因为已经在for语句中完成了。将来,请清楚说明您的问题以及您获得的任何错误代码。