我在使用我的以下函数时遇到问题,我无法获得 if (sequence[i]!='M' && sequence[i]!='U' && sequence[i]! ='I')
有效..
基本上,我的程序在这个过程中工作 -
- 输入输入的大小
- 输入只能为M、U或I的字符序列
例如。如果我输入 3
作为我的输入大小,然后输入 MUUI
,它将打印为无效输入并要求新输入,直到出现类似 MUI
被输入。
但是,如果我输入 3
作为输入大小,然后输入 MPO
作为字符序列,程序将继续运行 if ( sequence[i]!='M' && sequence[i]!='U' && sequence[i]!='I')
即使它不正确。
如果我尝试重新排列我的行,虽然这次输入的字符是正确的,但大小将不正确,程序仍将继续执行..
我是不是哪里做错了?
int main(){
int sz;
cout<<"Enter in size of input: ";
cin>>sz;
char *sequence = new char[sz];
cout<<"Enter MU character sequence(M/U/I): ";
cin>>sequence;
bool checkMUI =isMUString(sequence, sz);
while(checkMUI== false){
cout<<"INVALID INPUT. RE-Enter MU character sequence(M/U/I): ";
cin>>sequence;
checkMUI =isMUString(sequence, sz);
}
bool isMUString(char* sequence, int size){
int numberOfChars = 0;
while (*sequence != '\0')
{
numberOfChars++; sequence++;
}
for(int i=0;i<size;i++){
if (numberOfChars != size){
if (sequence[i]!='M' && sequence[i]!='U' && sequence[i]!='I'){
return false;
}
}
}
return true;
最佳答案
这应该有效:
bool isMUString(const char* sequence, int size) {
int numberOfChars = strlen(sequence);
if(numberOfChars != size) {
return false;
}
for(int i=0;i<size;i++){
if (sequence[i]!='M' && sequence[i]!='U' && sequence[i]!='I'){
return false;
}
}
return true;
}
这是我改变的:
- 使用strlen判断字符串的长度
- 将
if(numberOfChars != size)
从 for 循环体中取出,因为它只需要检查一次。
这是一个示例,如果您不想使用 strlen()
(尽管您应该使用)。我复制了一个 sequence
指针,这样当您完成 while 循环计数时,您仍然有一个指向字符串开头的指针:
bool isMUString(const char* sequence, int size) {
int numberOfChars = 0;
const char* ptr = sequence;
while (*ptr != '\0') {
numberOfChars++; ptr++;
}
if(numberOfChars != size) {
return false;
}
for(int i=0;i<size;i++){
if (sequence[i]!='M' && sequence[i]!='U' && sequence[i]!='I'){
return false;
}
}
return true;
}
关于c++ - 程序没有正确执行内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36394190/