c语言如何从一个文本中筛选出特定字符串
如图,为了将txt文件每行字符串包含的数字提取出来,编写了一个程序。
思路:
找到is,然后指针后移三位,然后到达空格,则停止。再将字符转换为数字。
具体操作:
首先用fget()读取每行,然后用strstr()找到is,然后指针后移三位,再判断空格,复制保存。最后将提取出来的数字字符串转换成整型
源码
#include <stdio.h>
#include <iostream>
int main(void)
{
FILE *input_file;
unsigned int file_size = 0; //读取文件的字节数
char line[64]; //接收文件每行
char result[300][64] = {0}; //二维数组,存放结果字符串
int result_final[300] = { 0 }; //数组,存放结果字符串
int i = 0;//最终检测出的多少个数字
int len = 0;
int len1 = 0;
int a = 0;
int b = 1;
input_file = fopen("test.txt", "rb+");
if (input_file == NULL)
{
printf("can not find file!\n");
exit(0);
}
else
{
printf("File opened successful!\n");
}
while (fgets(line, sizeof(line), input_file))
{ //用fgets函数逐行读取到line
char *pLast = strstr(line, "is"); //用strrchr查找'='字符最后出现的位置,
if (NULL != pLast)
{
pLast = pLast + 3; //is后面三位是数字开头
while (*pLast != ' ')
{
len++;
pLast++;
}
memcpy(result[i], pLast- len, len);//将每行最后一个"is"之后的字符赋给result
len=0;
i++;
}
}
fclose(input_file);
//将提取出来的数字字符串转换成整型
for (int j = 0; j <i ; j++)
{
printf("result[%d]=%s\t", j,result[j]);
len1 = strlen(result[j]);
a = 0;
b = 1;
int temp = 0;
while (a < len1)
{
//b = b * 10;
temp= (result[j][len1-1-a]-'0')*b +temp;
b = b * 10;
a++;
}
result_final[j] = temp;
printf("result[%d]=%d\n", j, result_final[j]);
}
return 0;
}