程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 一種反轉字符串的巧妙解法

一種反轉字符串的巧妙解法

編輯:關於C++

如題,需求是反轉字符串,當然啦方法是有很多的,這種我覺得蠻有意思的^_^

#include 
#include 

using namespace std;

int main() {
    string s;
    cin>>s;
    for(int i = s.size(); i--; ) {
        cout<
Input: abc
Output: cba

這段代碼的特點是i??是放在了判斷語句中,起初我不是很能理解,不過根據輸出斷定了是i等於0的時候就退出了循環。經過打斷點來測試,證實了這個猜測。

為了證實這個猜想,我繼續寫了兩段簡短的代碼。

#include 
#include 
using namespace std;
int main() {
    string s;
    cin >> s;
    for (int i = s.size(), j = s.size() - 1; i--, j--;) {
        cout << s[i] << " " << s[j];
    }
    cout << endl;
    return 0;
}
Input: abc
Output: c bb a

最終的狀態是:

i=1, j=0

另一段代碼是:

#include 
#include 
using namespace std;
int main() {
    string s;
    cin >> s;
    for (int i = s.size(), j = s.size() - 1; j--, i--;) {
        cout << s[i] << " " << s[j];
    }
    cout << endl;
    return 0;
}
Input: abc
Output: c bb a (輸出這部分後程序崩潰)

最終的狀態是:

j=-1, i=0

第一段代碼表明自減操作有返回值,且就是這個變量的值;那麼為什麼第二段代碼中j減到0之後還會繼續減少呢,之所以繼續減少是因為循環還在走,之所以循環沒有退出是因為這裡的逗號運算符的結果取最後一個。

還有一個小細節,我不是很清楚,因為很少在實際碼字中用過,那就是判斷中是因為0才停止的,那麼負數呢?也就是說負數直接類型轉換是true還是false呢。

#include 
using namespace std;
int main() {
    if(-1) cout<<"t";
    else cout<<"f";
    return 0;
}
Output: t

緊接著我又嘗試了在C#中的情況,這裡無法自動將int轉換成bool,只得寫了一個方法。

class Program
{
    static void Main(string[] args)
    {
        string s;
        s = Console.ReadLine();
        for (int i = s.Length; isBool(i--);)
        {
            Console.Write(s[i]);
        }
        Console.WriteLine();
    }

    static bool isBool(int n)
    {
        if (n > 0) return true;
        else return false;
    }
}
Input: abc
Output: cba

總而言之,好吧我承認很Easy,不過其過程卻是充滿了樂趣,就喜歡這種假裝探索的感覺。Bye……

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved