我需要將一個由百萬「零」或「一個」字符組成的字符串(需要指定1039680個字符)轉換爲布爾數組。現在我擁有它的方式需要幾秒鐘才能完成300000個字符的字符串,而且這個過長。我需要能夠在不到一秒的時間內完成整個字母轉換。C將字符串轉換爲布爾數組
我試圖這樣做的方式是讀取一行(在此試用版中)300000個零的文件。
我知道我的代碼對於包含除零或1之外的東西的字符串將起作用,但我知道該字符串將只包含那些字符串。
我也看着atoi,但我不認爲它會適合我的需要。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define BUFFERSIZE 1039680
int main()
{
int i ;
char buffer[BUFFERSIZE];
bool boolList[BUFFERSIZE] ;
// READ FILE WITH A LOT OF ZEROS
FILE *fptr;
if ((fptr=fopen("300000zeros.txt","r"))==NULL){
printf("Error! opening file\n");
exit(1);
}
fscanf(fptr,"%[^\n]",buffer);
fclose(fptr);
// CONVERT STRING TO BOOLEAN ARRAY
for (i=0 ; i<strlen(buffer) ; i++) {
if (buffer[i] == '1') boolList[i] = 1 ;
}
return 0;
}
您是否嘗試過在循環之前緩存'strlen()'調用?也許你的編譯器正在計算每次迭代中字符串的長度。 –
假設'char'和'bool'都是1個字節大小,迭代緩衝區作爲dword列表,然後執行'dwordboollist [j] = dwordbuffer [j]&0x01010101'。 –
或者你可以迭代而不用長度,一旦你到達空字符就停下來。 – Rufflewind