如何基于C中的元素拆分字符串

时间:2018-06-27 18:24:22

标签: c sorting split

我正在从事我的C项目,并试图找出简单的东西。如何基于其char元素拆分字符串。我知道这听起来确实很容易,但我知道确实如此。但是我遇到了这种非常奇怪的情况,我不知道该怎么办。

代码:

char str[999] = "Hello World> This is a test";

    char cursort[12];
    for(int i = 0; i < 12; i++)
    {
        cursort[i] = str[i];
    }

    int u = 999 - 12;
    char leftover[u];
    for(int i = 1; i < u + 1; i++)
    {
        leftover[i - 1] = str[i + 11];
    }

    printf("%s\n", cursort);
    printf("%s\n", leftover);
    getchar();

输出:

Hello World>Hello World> This is a test
 This is a test

我想要的是前12个字符在一行上,其余的在单独一行上。

3 个答案:

答案 0 :(得分:1)

好吧,首先,我删除了您的动态数组。接下来,为了说明清楚,我尝试保留尽可能多的代码。

int main(void)
{
    char str[999] = "Hello World> This is a test";

    // Make a string for the first 12 elements.
    char cursort[13];
    for(int i = 0; i < 12; i++)
    {
        cursort[i] = str[i];
    }

    // Terminate it.
    cursort[12] = '\0';

    // Make an array for the remaining data on the stack
    // Size is 12 less than original plus one for terminator.  This should be a constant or a #define
    char leftover[999 - 12 + 1];

    // Copy str into leftover offset by 12.
    for(int i = 12; i<999; i++)
    {
        leftover[i - 12] = str[i];
    }

    // Make sure it is terminated.
    leftover[999] = '\0';

    // Print it
    printf("%s\n", cursort);
    printf("%s\n", leftover);
    getchar();

    return 0;
}

最大的变化是我如何设置第二个循环。我还要补充一点,执行这样的字符串操作非常容易出错。您最好使用内置的例程来处理此问题。

答案 1 :(得分:0)

第二个循环出现了问题。试试这个。

dat <- read.table(text = "            id_1 id_2  name  count total
          1  001  111    a     15   NA
          2  001  111    b      3   NA
          3  001  111   sum    28   28
          4  002  111    a      7   NA
          5  002  111    b     33   NA
          6  002  111   sum    48   48",
                  header = TRUE, stringsAsFactors = FALSE)

答案 2 :(得分:0)

第二个循环可以从0开始并避免减去1。从12开始迭代器,您可能想要这样做

for(int i = 0; str [i + 12]!= 0x00; i ++)

这样,您避免只复制空值就进行了X次迭代。