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匹配出来