C中的字符串操作,以查找字符串中数字的平均值
我有一个CSV格式的C文本文件。因此,每行文本都是这样的记录:C中的字符串操作,以查找字符串中数字的平均值,c,string,text-files,C,String,Text Files,我有一个CSV格式的C文本文件。因此,每行文本都是这样的记录: bob numbers,10,11,12,13 john no,7,13,10 我可以在C中使用什么函数来获得一个输出,使每行平均值向上舍入到2d.p.,如下所示 bob numbers 11.5 john no 6.67 您可以使用strtok和作为分隔符来读取名称和数字,然后使用atoi将数字字符串转换为实际数字。此外,fgets允许您逐行读取文件。计算平均值是相当简单的。考虑使用ATOF代替ATOI,把数字看成是双倍的,而
bob numbers,10,11,12,13
john no,7,13,10
我可以在C中使用什么函数来获得一个输出,使每行平均值向上舍入到2d.p.,如下所示
bob numbers 11.5
john no 6.67
您可以使用strtok和作为分隔符来读取名称和数字,然后使用atoi将数字字符串转换为实际数字。此外,fgets允许您逐行读取文件。计算平均值是相当简单的。考虑使用ATOF代替ATOI,把数字看成是双倍的,而不是整数。
你的问题可以得到解决,如下所示:< /P>
#include <stdio.h>
#include <string.h>
int main()
{
int a[20];
FILE *fp = fopen("input.txt","r");
char buff[255],*p;
int i,j,k;
float sum;
while(fgets(buff,255,fp) != NULL)
{
i = 0;
k = 0;
sum = 0;
p = strtok(buff," ");
while(p!=NULL)
{
if(i>1)
a[k++] = atoi(p);
p = strtok(NULL,",");
i++;
}
for(j=0;j<k;j++)
sum += a[j];
printf("%5.2f\n",(float) (sum/k));
}
return 0;
}
首先你需要a,然后a会有用,然后可能是a。现在,您可以尝试使用这些函数来编写程序。如果你对这个程序有任何问题,那么回到这里,写一个关于这个问题的详细问题,并提供你的代码。如果你只是在学习,那么getline或fgets会逐行读取一个文件getline会在返回时提供更多关于该行的信息。将行读入缓冲区后,字符串变量getline也会为您分配空间,然后您可以使用strtok和atoi解析该行,或者在每次转换为数字后仅使用strtod reseting pointer=endptr。注意:这个问题已经回答了很多次,答案已经在这个网站上了。谢谢你的帮助。你的代码给了我正确的平均值。然而,我确实有一些问题。首先,我们要做的是,255,fp!=空行它是如何通过整个文本的,fgets不是只从文本文件中获取一行吗。到第二条线怎么走。其次,p=strtokbuff;为什么我们不能把它改成p=strtokbuff,,;。我试着这样做,但后来我得到了错误的平均值。再次感谢您的帮助,如果您能回答我的问题,我将不胜感激。@SSRed您在第一部分的问题中有答案。while循环一直循环,直到fgets没有任何可读取的内容为止。因此,只有当它读取了所有行时才会发生这种情况。关于strtok的第二部分这个API维护一个内部状态,我们只需要传递实际字符串一次,而要获取其他tok,我们只需要传递NULL,如图所示。如果这个答案是正确的,就把它标记为已回答,这对其他人会有帮助。