我正在从事我的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个字符在一行上,其余的在单独一行上。
答案 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次迭代。