2014-01-23 156 views
-3

这是我的问题,我必须从文本文件中读取某些数据。怎么样?如何从文本文件中读取某些数据C

例如: “test1.txt的” 有一个像

IEEEXtreme 2008年版的一些数据将发生在2008年3月8日

,我有 “keyword.txt” 有:

2008地方

我必须从单词“2008”到“地方”单词的文本。

////////////////////////

让我们把这个简单的... 你能帮我解决这个问题吗?

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

int main() 
{ 
    char str[] ="This is a simple string"; 

    char * p1,* p2; 

    p1 = strstr(str,"is"); 
    p2 = strstr(str,"string"); 


    puts (str); 
    system("Pause"); 
    return 0; 
} 

我不想让这只读取是字符串。

+0

到目前为止,你做了什么? – legends2k

+0

我会提取我的代码,但它可能有点不好...如果您发现一个简单的方法随时发布。 – user3227401

+1

请分享代码。 – fritzone

回答

0

读线(fgets),然后strstrp(在p店)为 “2008”(在p1店),另一种为 “地方”(店p2),它们之间的(从p1 + strlen("2008")p2)是你需要什么......看到源后

EDIT(代码审查:P不是算法综述)

ler_pc

  1. 没有返回局部变量,而不是分配内存并返回(malloccalloc)(不要忘了释放它(在主叫侧)时,用它做)
  2. 如果文件大于60个字节可能你的应用程序会崩溃。将最大大小放到您想要阅读的行。
  3. 如果使用calloc来分配内存,则不需要将终结器置零字节。或... char str[60] = {0}可能工作太,这取决于你的编译器

ler_frases

  1. 可能,你希望p1[aux] = '\0'走出循环,这是没有意义的设置它每次为零(或从上面看到编号3)。同为p2 ...
  2. 第一次,在strcmp(palavra, p1)palavra没有初始化,所以你不知道:(也许你想要一个do ... while循环,而不是一段时间。
  3. 出formaility的里面有什么了吗, strcmp(palavra, p1) == 0可以写成!strcmp(palavra, p1)
  4. 开始时不分配excerto因为您没有使用它,所以没有意义。
  5. while ((cntrl = 1)可能你的意思==(同为零部分)
  6. sizeof(excerto)始终是一个指针的大小,而不是字符串的长度。 strlen()给你的字符串的长度。

main

  1. 如果你在Linux上,pause!= PAUSE运行此!= Pause,当谈到关于system
  2. 你愉快地运行,即使这些文件未找到应用程序:(

一般:

  1. 请使用一致的缩进这将节省你很多的bug,并会使人想读你的代码。
  2. 总是免费的你分配:)

第二编辑第二源码Ë

对于这个特定的情况下:

p1 = strstr(str,"is");将返回一个指针,该指针将指向第一is字符串中...即:第三个字符(“这”包含“是”)...所以可能你想" is"

p2 = strstr(str,"string");会给你的指针指向字符串。

现在,你需要做的是这样的:

/* allocate enough memory for the string between " is" and "string" */ 
size_t len = p2 - p1 + strlen(" is") + 1; 
char* between = (char*)(calloc(len, sizeof(char)); 

/* and copy out the string from the original*/ 
strncpy(between, p1 + strlen(" is"), len); 

所以现在between你有需要的字符串(我希望我理解你想要正确的)。 PS:放回原来的代码,其他人可能会从中学到东西。

+0

你能为我做一个示例代码吗?请感谢 – user3227401

+2

对不起,没有代码,只有解释......你需要学习:P – fritzone

+0

而(!(P =龟etc(FP))= EOF) \t P1 =的strstr(P, “2008”) \t P2 = strstr(p,“2009”) \t printf(“%c”,); printf(“\ n”); 这是这样的? – user3227401