c++ - 程序没有正确执行内容

标签 c++

我在使用我的以下函数时遇到问题,我无法获得 if (sequence[i]!='M' && sequence[i]!='U' && sequence[i]! ='I') 有效..

基本上,我的程序在这个过程中工作 -

  1. 输入输入的大小
  2. 输入只能为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/

相关文章:

c++ - OpenGL - 水波(有噪音)

c++ - 无法在 OS X 上包含 opencv3

c++ - 我应该如何将 SSE 数据传递给我的函数/运算符(operator)?

c++ - 修改 C++ std::set 中元素的排序相关部分

c++ - 在 C++ 中移动 const 和重载通用引用

c++ - 在构造函数中终止对象创建

C++11:列表初始化中的 () 或 {}?

C++:malloc:错误:从 ‘void*’ 到 ‘uint8_t*’ 的无效转换

c++ - 为什么我的#includes 的顺序很重要? (C++)

c++ - 加载/存储宽松原子变量和普通变量有什么区别?