首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c语言如何从文件里一个个读入不定长字符串啊

2012-08-11 
c语言怎么从文件里一个个读入不定长字符串啊?本来准备用C++这样写的char*astring temp_1ifstream inin.

c语言怎么从文件里一个个读入不定长字符串啊?
本来准备用C++这样写的
  char *a; 
  string temp_1;
  ifstream in;
  in.open("D:\\key.txt",ios::in);
  while((in>>temp_1))
{

a=new char[temp_1.length()+1];
strcpy(a,temp_1.c_str());
cout<<temp_1.length()<<"^^^^"<<a<<endl;
}
单独的工程里运行得还好,一旦把它放到了我的工程里 就会显示有语法标志符 tanl,tanhl....等错误 只要是把#include<iostream>
#include<fstream>
这两个放进去就会报错 难道是我用了移位的比如>> 使得系统识别不了?

所以求问:
用c语言怎么读入一篇文档 并把每个关键词否分开啊?
比如 key.txt
下有 key word hash function what some any 等词但不知道有多少个,怎么通过c语言来实现全部读入,并把每个词都分到一个char* 的变量里去啊 
求救了!!!

[解决办法]
我写的一个解析命令行的代码片段,可以满足你的需求

C/C++ code
static char *__cmd_strip(char *str){    int len;    while(str && *str)    {        if (*str == ' ' || *str == '\t' || *str == '\n' || *str == '\r')            str++;        else            break;    }    len = strlen(str);    while(len--)    {        if (str[len] == ' ' || str[len] == '\t' || str[len] == '\n' || str[len] == '\r')            str[len] = '\0';        else            break;    }    return str;}/** *@brief 跳过用分隔符隔起来的一组参数 *比如'123 4  6 7 89',当作一个参数 *比如'123 "4" 5 "6" 7 8 9',当作一个参数 *比如"123 '4'5  6 7 '8 ' 9",当作一个参数 * *@param cmd 要处理的字符串 *@param quotes 用作分隔符的字符 *@return 跳过分隔符后的字符串地址 * 例如'123'45,则返回的是45的地址 * */static char *__utl_cmd_jump_quotes(char *cmd, char quotes){    if (*cmd == quotes)    {        while(cmd             && *cmd            && *++cmd != quotes)            ;    }    return cmd;}static int _utl_cmd_parser(char *cmd, int *argc, char *argv[], int max_argc){    int i;    char *p;    char *qs,*qe;//quotes start, quotes end    int cnt = 0;    char *old = cmd;    *argc = 0;    cmd = __cmd_strip(cmd);    if (cmd == NULL)        return -1;        while(cmd && *cmd && cnt <= max_argc)    {        argv[cnt] = cmd;        qs = cmd;        qe = __utl_cmd_jump_quotes(qs, '\'');        qe = __utl_cmd_jump_quotes(qe, '"');        cmd = qe;        while(cmd && *cmd)        {            cmd++;            if (*cmd == ' ' || *cmd == '\t')            {                *cmd = '\0';                cmd++;                cmd = __cmd_strip(cmd);                break;            }        }        //printf("qs: %d, qe: %d, cmd:%d\n", qs-old, qe-old, cmd-old);        if (qs != qe)        {            argv[cnt]++;            if (qe != cmd)                strcpy(qe, qe+1);        }        cnt++;    }    for (i=0;i<cnt;i++)    {        argv[i] = __cmd_strip(argv[i]);    }    *argc = cnt;    return cnt;}
[解决办法]
fscanf试试呢
[解决办法]
读到数组 再strtok匹配出来

热点排行