程序未正确执行内容

时间:2016-04-04 03:37:02

标签: c++

我在使用以下我无法获得if (sequence[i]!='M' && sequence[i]!='U' && sequence[i]!='I')作品的功能时遇到问题。

基本上,我的程序在这个程序中起作用 -

  1. 输入输入的大小
  2. 输入字符序列,其中字符只能是M,U或I
  3. 例如。如果我输入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;
    

2 个答案:

答案 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;
}

这是我改变的内容:

  • 使用strlen确定字符串的长度
  • 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;
}