gpt4 book ai didi

c - 从字符串中提取子字符串(使用字符串库在 C 中从 ping 回复中获取时间)

转载 作者:行者123 更新时间:2023-11-30 21:30:13 24 4
gpt4 key购买 nike

只是想获得时间值。查看 C 库表没有直接的答案。

64 bytes from 58.27.61.104: icmp_seq=3 ttl=59 time=45.5 ms

最佳答案

使用标准string.h函数strstr来定位字符串中的子字符串。当找到时,这将返回指向所找到的子字符串的第一个字符的指针。添加子字符串长度,使其指向紧随该子字符串的字符。

然后使用strtod将ASCII字符串转换为 double 值。 strtod 忽略前导空格并使用当前区域设置:

.. leading white-space characters in the string (as defined by the isspace(3) function) are skipped. The decimal point character is defined in the program's locale (category LC_NUMERIC).
(from man strtod on OS X)

一个健壮的程序应该检查无效的输入(即time=后面没有数字,或者该值不能用double表示),但错误检查已经为了清楚起见,此处省略。

在代码中:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (void)
{
char *input = "64 bytes from 58.27.61.104: icmp_seq=3 ttl=59 time=45.5 ms";
char *looking_for = "time=";
char *pos_of_time;
double the_time;

pos_of_time = strstr (input, looking_for);
if (pos_of_time == NULL)
{
printf ("No match for 'time=' found\n");
} else
{
/* pos_of_time points to the 't' */
/* we need to look beyond the string */
pos_of_time += strlen(looking_for);
the_time = strtod (pos_of_time, NULL);
printf ("time is %f\n", the_time);
}

return 0;
}

显示了预期的输出:

time is 45.500000

关于c - 从字符串中提取子字符串(使用字符串库在 C 中从 ping 回复中获取时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27445330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com