我在使用以下我无法获得if (sequence[i]!='M' && sequence[i]!='U' && sequence[i]!='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;
答案 0 :(得分:2)
这应该有效:
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;
}
这是我改变的内容:
if(numberOfChars != size)
从for循环体中取出,因为它只需要检查一次。以下是一个例子,如果你不想使用strlen()
(尽管你应该这样做)。我复制了sequence
指针,这样当你完成循环计数时,你仍然有一个指向字符串开头的指针:
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;
}
答案 1 :(得分:1)
我认为这就是你想要的:
bool isMUString ( char* sequence, int size )
{
int numberOfChars = 0;
while ( sequence[numberOfChars] != '\0' )
{
numberOfChars++;
}
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;
}