尝试打印数字字符串中的最后一个元素
Trying to print the last element in string of numbers
我在 C 中有这段代码,我将在其中输入一串由空格分隔的数字,然后用 strsep
拆分它。如果我输入一个像 "1 2"
这样的字符串,并设置 strcmp
来查找最后一个元素之前的数字,代码就可以工作,但是如果我设置 strcmp
来查找最后一个元素,代码失败。你能提出任何修复建议吗?
char *string = malloc(1028), *found;
if (fgets(string, 1028, stdin) != NULL) {
while ((found = strsep(&string, " ")) != NULL) {
if (strcmp(found, "2") == 0) {
printf("%s\n", found);
}
}
}
因为found
指向的最后一个元素包含换行符。因此,您要么必须像这样将新行添加到 strcmp
:strcmp(found, "2\n")
(假设 2 是您的最后一个元素),要么当您调用 strsep
时,您需要对 space 和换行符:strsep(&string, " \n")
.
完整的解决方案:
char *string = malloc(1028);
if (string) {
if (fgets(string, 1028, stdin) != NULL) {
char *p = string, *found = string;
while ((found = strsep(&p, " \n")) != NULL) {
if (strcmp(found, "1") == 0) {
printf("%s\n", found);
}
}
}
free(string);
}
需要注意的几点:string
指针由 strsep
函数修改,因此我更新了代码以使用中间变量 p
。我还更新了代码以验证分配是否成功,然后在最后释放它。根据您的系统要求,您可以考虑放弃堆并在堆栈上分配 string
。
我在 C 中有这段代码,我将在其中输入一串由空格分隔的数字,然后用 strsep
拆分它。如果我输入一个像 "1 2"
这样的字符串,并设置 strcmp
来查找最后一个元素之前的数字,代码就可以工作,但是如果我设置 strcmp
来查找最后一个元素,代码失败。你能提出任何修复建议吗?
char *string = malloc(1028), *found;
if (fgets(string, 1028, stdin) != NULL) {
while ((found = strsep(&string, " ")) != NULL) {
if (strcmp(found, "2") == 0) {
printf("%s\n", found);
}
}
}
因为found
指向的最后一个元素包含换行符。因此,您要么必须像这样将新行添加到 strcmp
:strcmp(found, "2\n")
(假设 2 是您的最后一个元素),要么当您调用 strsep
时,您需要对 space 和换行符:strsep(&string, " \n")
.
完整的解决方案:
char *string = malloc(1028);
if (string) {
if (fgets(string, 1028, stdin) != NULL) {
char *p = string, *found = string;
while ((found = strsep(&p, " \n")) != NULL) {
if (strcmp(found, "1") == 0) {
printf("%s\n", found);
}
}
}
free(string);
}
需要注意的几点:string
指针由 strsep
函数修改,因此我更新了代码以使用中间变量 p
。我还更新了代码以验证分配是否成功,然后在最后释放它。根据您的系统要求,您可以考虑放弃堆并在堆栈上分配 string
。