程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> leetcode-C++程序裡面一個很奇怪的bug!跪求解釋!!!

leetcode-C++程序裡面一個很奇怪的bug!跪求解釋!!!

編輯:編程解疑
C++程序裡面一個很奇怪的bug!跪求解釋!!!

這是我試圖求解leetcode 第六題,這不重要,主要看一下程序裡面那個if語句的執行
問題,不用看我針對這道題的邏輯對不對,這不是重點,重點是那個if語句!!!
在代碼那個(***)的地方我給了注釋!!!

 #include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
    string s;
    int numRows;
    cin >> s >> numRows;
    char *ss = new char[s.size()];
    int k = 2 * numRows - 2;//每個單元元素的個數
    int m = s.size() / k;//一共有多少個單元
    int flag = s.size()  % k;
    if(flag != 0)
        m++;
    int n = 2 * m;
    //先對第一行單獨處理
    for(int i = 0, j = 0; j < m; ++j, i = i + k)
    {
        ss[j] = s[i];
    }
    //對第二行至倒數第二行的處理
    //i =(所在行 - 1)
    //j =(所在列 - 1)
    int count = 0;
    int i = 1, j = 0;
    int x;
    cout << endl;
    while(i < numRows - 1)
    {
        while(count < n)
        {
            //偶數列時要加上行數,奇數列時要減去行數
            if(j % 2 == 1)
                x = 1;
            else
                x = -1;
            int num = (j / 2 + j % 2);//0 1 2 3 4 5 6 -> 0 1 1 2 2 3 3 

            cout << "k:" << k << '\n' << "num:" << num << '\n';
            cout << "i:" << i << '\n' << "x:" << x << '\n';
            cout << "s.size():" << s.size() << endl;

            //這裡輸入PAYPALISHIRING 3 之後 k=4,num=0,i=1,x=-1,s.size()=14明顯if語句執行不了,
            //但是居然執行了,我好郁悶啊!!!求解!!! 

         (***)   if((k*num+i*x) >= s.size())
            {
                cout << "DDDDDDDDD"  << endl;
                break;
            }
            //m代表第一行元素的個數
            cout << "CCCCCCCCCC" << endl;
            ss[m+n*(i-1)+j] = s[k*num+i*x];
            cout << s[k*num+i*x];
            j++;
            count++;
        }
        i++;
    }
    //對最後一行進行處理
    i--;
    j--;
    for(int jj = m+n*(i-1)+j, ii = numRows-1; ii < s.size() && jj < s.size(); ++jj, ii = ii + k)
    {
        ss[jj] = s[ii];
    }

    cout << ss << endl;
    return 0;
}

最佳回答:


s.size()返回的是unsigned int,如果不強制轉換成int類型的話,就會用一個-1的int和14的unsignedint比較,-1轉換成unsigned int會是一個很大的數值

 if((k*num+i*x) >= ((int)s.size())) 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved