将字符串分成一定数量的子串(C)

时间:2015-09-15 22:08:07

标签: c string

因此,我将某个文件作为输入读取并将其加载到内存中,并获取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个相同大小的子字符串,也就是说,如何找到块大小以便我可以让每个线程接收到该大小的子字符串?

2 个答案:

答案 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终结者。