如何在C中基于元素拆分字符串
我在做我的C项目,试图找出一些简单的东西。如何根据字符串的char元素拆分字符串。我知道这听起来很容易,我也知道确实如此。但我发现这件事很奇怪,我不知道该怎么办 代码:如何在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]
我只希望前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;
}