[精讚] [會員登入]

【C++】程式碼和解釋 — 檢測該字串是否為迴圈

重新梳理整個思路

分享完整連結 //n.sfs.tw/m10681

分享連結 【C++】程式碼和解釋 — 檢測該字串是否為迴圈 @精讚
(文章歡迎轉載,請尊重版權註明連結來源)
2020-11-20 17:27:09 By 過路君子
#include<iostream>  //導入iostream這個工具
#define UNI 5000  //定義值為5000的變數UNI

using namespace std;  //使用std命名空間

void filter(char x[UNI])  //建立名為filter的類別,其需餵入字元陣列
{
    char a[UNI];  //定義變數a為字元陣列,長度5000
    int b, c=0;  //定義變數b, c為整數,其c初始值為零
    
    for(int d=0;x[d]!='\0';d++)  //此迴圈會把餵入字元陣列每一個都讀一遍
    {
        b = (int) x[d];  //將x的第d+1個字元強制轉換成整數儲存在b裡面
        
        if(64<b && b<91) a[c] = (char) b, c++;  //如果b的數值落在65~90之間(即字元為'A'~'Z')則a的第c+1個字元設成強制轉換成字元型態的b且c的數值+1
        else if(96<b && b<123)  //若b的數值落在97~122之間(即字元為'a'~'z')
        {
            b -= 32;  //將b的值減去32之後存回
            a[c] = (char) b;  //將a的第c+1個字元設成強制轉換成字元型態的b
            c++;  //c的數值+1
        }
        else //若都不是
        {
            x[d] = '\0';  //則將目前讀取的字元清空
            continue;  //結束執行這次迴圈,開始下一回圈
        }
        
        x[d] = '\0';  //清空目前讀取的字元
    }
    
    for(int d=0;a[d]!='\0';d++) x[d] = a[d];  //將a字元陣列的值複製到x字元陣列                                                                    
}

bool comparison(char x[UNI]) //建立名為comparison的區塊,其需餵入字元陣列,但返回布林值
{
    char a[UNI];  //定義變數a為字元陣列,長度5000
    int b, e;  //定義變數b, e為整數
    
    for(b=0;;b++) if(x[b]=='\0') break;  //偵測餵入的字元陣列長度
    e = b;  //將e的值設成b
    b--;  //b的值-1
    
    for(int c=0;x[c]!='0';c++)  //此迴圈會把餵入字元陣列每一個都讀一遍
    {
        a[b] = x[c];  //將a字元陣列最末端的值設成x字元陣列的第c+1個字元
        b--;  //b的值-1
    }  //此時a字元陣列等於x字元陣列倒過來的樣子
    
    for(b=0;x[b]!='\0';b++) if(a[b] != x[b]) break;  //偵測a陣列是否與x陣列相同
    if(e==b) return true;  //如果a陣列和x陣列相等,則返回true值(1)
    else return false;  //否則返回false值(0)
}

int main(void)  //主程式
{
    char a[UNI];  //定義變數a為字元陣列,長度5000
    bool b;  //定義變數b為布林值
    
    while(cin >> a)  //直到EOF前持續讀取資料並存入變數a
    {
        filter(a);  //給入a值並執行filter類別
        b = comparison(a);  //將b值設成從comparison所返回的true或false值
        
        if(b) cout << "yes\n";  //若b值為1則輸出yes
        else cout << "no\n";  //否則輸出no
    }    
}

相關連結

http://n.sfs.tw/content/index/14818

END
你可能有興趣

【投票結果】第15回 東方Project 人氣投票

第15回的投票也漂亮的落幕了~

【CentOS 8】 防火牆基本操作

因為常用怕忘記,所以在這裡放一份來記憶。

【阿瑞斯病毒】中文Wiki網站

一個可以大家共同編輯的頁面,只可惜目前還沒有很多人編輯