1. 編譯錯誤
1. Windows下GCC編譯環境中文亂碼
原因: Windows(中文)默認的字符集是Windows-936(GBK),而GCC編譯器默認編譯的時候是按照UTF-8解析的,當未指定字符集時一律當作UTF-8進行處理,於是造成亂碼
// 在編譯參數中增加以下兩條指令:
-fexec-charset=gbk
-finput-charset=gbk
新增: 上述方法只有在只使用 cout 輸出時有效。若要使得 printf 和 cout 輸出中文均能正常顯示,需把 cmd 的命令顯示改爲 UTF8
chcp 65001
2. Java中編譯錯誤: 編碼GBK的不可映射字符
javac -encoding utf-8 JAVA_FILE_NAME.java && java JAVA_FILE_NAME
2. Java
Java中 String 和 Integer 的相互轉換
// 將字符串 String 轉換成整數 int。
1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([String],[int radix]);
2). int i = Integer.valueOf(my_str).intValue();
// 將整數 int 轉換成字符串 String
1.) String s = String.valueOf(i);
2.) String s = Integer.toString(i);
3.) String s = "" + i;
3. C/C++
C++ 中 int 和 string 的相互轉換
// int 轉 string
string Int_to_String(int n) {
ostringstream ss;
ss<<n; //n爲int類型
return ss.str();
}
// string 轉 int
int str2int(string str) {
istringstream ss(str);
int res;
ss>>res;
return res;
}
cin cout 加速
cin、cout慢是因爲: 默認的時候, 與 總是保持同步的,也就是說 、 兩種方法可以混用,而不必擔心文件指針混亂,同時 和 也一樣,兩者混用不會輸出順序錯亂。也正因爲這個兼容性的特性,導致許多額外的開銷。
解決方法:sync_with_stdio()
這個函數是一個“是否兼容stdio”的開關, 關閉所有C++標準流與其相應標準C流的同步。
進一步加速(接近scanf): 在默認的情況下 綁定的是 (cin.tie() == &cout),調用 導致 刷新。通過調用 cin.tie(0)
解除 與 的綁定 , 讀數據將不再導致 刷新。
ios::sync_with_stdio(false);
cin.tie(0);
C/C++快速讀寫
整數
#include<cctype>
inline int read()
{
int X=0,w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
return w?-X:X;
}
inline void write(int x)
{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
浮點
inline double dbread()
{
double X=0,Y=1.0; int w=0; char ch=0;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=X*10+(ch^48),ch=getchar();
ch=getchar();//讀入小數點
while(isdigit(ch)) X+=(Y/=10)*(ch^48),ch=getchar();
return w?-X:X;
}
4. 經典問題
1. 一維線段是否有交集問題
線段 (a1,a2) 和 (b1,b2) 是否有交集,根據數學知識我們可以知道,當 min(a2, b2) > max(a1, b1) 時,這兩條線段有交集。