如題,需求是反轉字符串,當然啦方法是有很多的,這種我覺得蠻有意思的^_^
#include
#include
using namespace std;
int main() {
string s;
cin>>s;
for(int i = s.size(); i--; ) {
cout<
Input: abc
Output: cba
這段代碼的特點是
為了證實這個猜想,我繼續寫了兩段簡短的代碼。
#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……