因此,我将某个文件作为输入读取并将其加载到内存中,并获取cstring char * text。
我想将该字符串拆分为一定数量的字符串。比方说我有4个线程,我希望每个线程都能打印出一个" piece"字符串(不一定按顺序)。
int num_threads = 4;
char *filename = "file.txt";
int file_size = load_file_to_mem(filename, &text); // I made this and it works.
int text_size = strlen(text);
int substring_size; // that would be the size of each substring
char to_thread[num_threads][block_size];
如何将*文本字符串拆分为4个相同大小的子字符串,也就是说,如何找到块大小以便我可以让每个线程接收到该大小的子字符串?
答案 0 :(得分:1)
除非我误解了这个问题,否则一种方法是使用ISH函数:num_threads - 1
每个子字符串的长度为ceil(test_size / num_threads) + 1
。剩下的单个子字符串的长度为test_size - (num_threads - 1) * ceil(test_size / num_threads) + 1
。
您可以这样做,因为num_threads
可能无法均匀地划分test_size
。添加一个字节以包含每个子字符串的空终止符的空格。
答案 1 :(得分:0)
划分字符串相对容易:你有从strlen获得的字符串大小,你可以通过将大小除以4来计算子字符串大小。然后可以使用类似strncpy之类的东西来复制例如,您需要从字符串中分割成一些临时缓冲区所需的字符数量。基本上,对于线程i,您需要复制substring_size字符,从字符substring_size * i开始(只需使用笔和纸来查看为什么会发生这种情况)。
现在,你有两个问题。一个是字符串的大小可能不能被4整除,这意味着从线程打印的字符串将不相等。你处理这个问题的方式是一个选择问题。一种方法是:
#myIFrame {
border: 0;
margin-left: 100px;
height: 860px;
width: 970px;
}
#myDiv {
background-color:#fff;
margin-left: 100px;
width: 970px;
height: 40px;
position: absolute;
}
这样,你在this_thread_size变量中就可以得到每个线程缓冲区的确切大小。不要忘记NUL终结者。