close
hw1 Sorting:
input.txt ---------------------- N: number of sequence SEQ1 SEQ2 output.txt ---------------------- sorted SEQ1 sorted SEQ2 Example. input.txt ---------------------- 2 8 5 9 2 1 output.txt ---------------------- 5 8 9 1 2
讀檔:如何快速將字串轉成int
int n=0; int v[32768]; char s[100000]; FILE* fin = fopen("input.txt", "r"); fgets(s, 16, fin); for(int cnt=0; s[cnt] != '\n'; ++cnt) n=n*10 + s[cnt] - '0'
從ascii 著手,'0' 為 48,之後是1,2,3....所以可以依此轉換,不過一次只能一個digit,所以每次要 n*10來得到實際正確的值
相同的應用
while(n --) { fgets(s, 100000, fin); int tmp=0; int size = 0; for(int = 0; s[cnt] != '\n'; cnt++) { if(s[cnt] == ' ' ) { v[size] = tmp; tmp=0; } else { tmp = tmp *10 + s[cnt] - '0'; } } }
然後此題直接用 <algorithm>裡面的sorting 即可,c的sorting已經有最佳化 O(n*logn)
寫檔:也可用同樣方式
cnt = 0; char tmp_s[12]; for(int I =0; I < size; ++I) { int index = -1; if(v[i] == 0) s[cnt++] = '0'; while(v[i] > 0) { temp_s[++index] = v[i] %10 + '0'; v[i] /= 10; } for(int j = index; j >= 0;--j) { s[cnt++] = tmp_s[j]; } s[cnt++] = ' '; } s[cnt] = '\n'; s[cnt+1] = '\0'; fputs(s, fout);
全站熱搜