Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中基于元素拆分字符串_C_Sorting_Split - Fatal编程技术网

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

如何在C中基于元素拆分字符串,c,sorting,split,C,Sorting,Split,我在做我的C项目,试图找出一些简单的东西。如何根据字符串的char元素拆分字符串。我知道这听起来很容易,我也知道确实如此。但我发现这件事很奇怪,我不知道该怎么办 代码: 我只希望前12个字符在一行上,其余字符在另一行上。第二个循环出了问题。试试这个 int u = 999 - 12; char leftover[u]; for (int i = 0; i < u; i++) { leftover[i]

我在做我的C项目,试图找出一些简单的东西。如何根据字符串的char元素拆分字符串。我知道这听起来很容易,我也知道确实如此。但我发现这件事很奇怪,我不知道该怎么办

代码:


我只希望前12个字符在一行上,其余字符在另一行上。

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

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

第二个循环可以从0开始,避免减去1。从12开始启动迭代器,您可能希望这样做

对于int i=0;str[i+12]!=0x00;我++


这样可以避免只复制空值而进行X次迭代。

好的,首先,我删除了动态数组。接下来,为了清晰起见,我尝试保留尽可能多的代码,同时显示注释的情况

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;
}

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

我甚至无法理解您的代码试图做什么。一眼就可以确定您正在读取str数组的末尾。为剩菜制作动态数组也是以一种不完全可移植的方式完成的。老实说,我也真的不确定你想要完成什么。所以我回头在调试器中遍历它,看看它是否符合您的要求。对不起。我意识到我的帖子并没有带来太多的收获,因为我会尽量让大家更容易理解我想要完成的事情。还需要NUL终止你的字符串。若数组长度为12,则最后一个值必须为0。NUL是什么?抱歉,如果我听起来很愚蠢,但我大约3周前才开始使用C。不,仍然,相同的结果可以在第一个for循环上验证null。仍然,相同的结果对于这个特定问题,您建议使用哪些内置例程?strcpy,strncpy会出现在脑海中,尽管它们只替换for循环。你仍然需要做一些指针的工作。如果拆分仅用于打印,那么您可以不使用任何辅助字符串。顺便说一句,从样式上看,如果我签入此项,我将被笑出办公室。当你有机会的时候,看看神奇的数字。现在,如果我想更改字符串中的断点位置,我需要更改每个数字。如果我创建了常量,它只需要一次更改。一般来说,这更易于维护,也更不容易出错。
        int u = 999 - 12;
        char leftover[u];
        for (int i = 0; i < u; i++)
        {
            leftover[i] = str[i + 12];
        }
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;
}