菜鸟求代码详细解释

jiaohuimin 2010-01-21 02:33:19
各位高手好!
别人的一段代码看不明白,
跪求详细解释!
int str,sym,tmp,val;
int symbol_count;

// open file
FILE *from;
char line[MAX_LINE];
from = fopen(filename,"r");

symbol_count=0;

for (num_strings=0; fscanf(from,"%[^\n]\n",line)!=EOF; num_strings++) {
for (sym=0,tmp=99; tmp>1; sym++) {
tmp=sscanf(line,"%d %[0-9 ]",&val,line);
}
if (symbol_count < sym)
symbol_count=sym;
}

cout << "\nmax sequence length = " << symbol_count << "\n";
cout << "number of strings = " << num_strings << "\n";
rewind(from);

strings = new int* [num_strings];
string_len = new int [num_strings];
for (int i=0; i<num_strings; i++) {
strings[i]=new int [symbol_count];
for (sym=0; sym<symbol_count; sym++) // initialize array to -1
strings[i][sym]=-1;
}

红色部分是看不懂的部分,不知道读取的文件格式应该是怎么放置内容的!
求详细解释!
多谢了先!
...全文
108 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sicxun 2010-01-21
  • 打赏
  • 举报
回复
关于"%d %[0-9 ]"
selooloo大侠的解释才是完全正确的哦
jiaohuimin 2010-01-21
  • 打赏
  • 举报
回复
好的,多谢sicxun,试一下!
sicxun 2010-01-21
  • 打赏
  • 举报
回复
用一条scanf不好处理
建议读一整行
再用strchr + atoi 来处理字符串
jiaohuimin 2010-01-21
  • 打赏
  • 举报
回复
sicxun和selooloo解释的都很详细,谢谢!

想知道按照我定义的txt文件的内容格式,该怎么修改代码呢?
目的:每行的长度不等,每行定义一个数组,将内容保存到数组中
sicxun 2010-01-21
  • 打赏
  • 举报
回复
如果用来存放数组的空间已经准备好了
就一个个整数读取并存储,根据\n换行

或先扫描文件再创建存储空间
如果是矩形空间扫一次就行了
非矩形空间至少扫2次
selooloo 2010-01-21
  • 打赏
  • 举报
回复
正则表达式
"%[^\n]\n" 读取除回车外的字符,遇到回车结束
"%d %[0-9 ]" %d先取个整数,后面有个空格,即取空格后面的0-9的字符,包括空格符,注意0-9后面还有个字符,遇到非0-9和空格的字符结束读取
jiaohuimin 2010-01-21
  • 打赏
  • 举报
回复
看了回复,知道不能按照我定义的txt了。
两个大约我都明白了,
但是如果要读取我的存储格式
该怎么修改呢?
每行的长度不等,每行定义一个数组,将内容保存到数组中。
谢谢sicxun!
sicxun 2010-01-21
  • 打赏
  • 举报
回复
那是机器做的事好不好
你运行一下就知道行不行了

正则表达式 的一个重要特点就是: 看懂比编写还难
所以一般正则式都带强注释的
jiaohuimin 2010-01-21
  • 打赏
  • 举报
回复

加入我的文txt件这样存放,按照以上格式能够正确读取吗?谢谢
1 1 2 1 3 2 1 2 3 1 2 1 1 1 2 3
1 3 2 1 2 1 2 1 1 1 2 2 1
2 1 2 2 1 1 2 1 1 3
2 1 1 1 2 2 1 2 1 1 1
1 1 2 2 1 1 1 2 2

下面那个正则表达式怎么解释呢?
sicxun 2010-01-21
  • 打赏
  • 举报
回复
"%d %[0-9 ]"
这句是
一个整数加一个空格加一个个位数
如:
123 0
jiaohuimin 2010-01-21
  • 打赏
  • 举报
回复
高手出现吧!
在线等呢!
sicxun 2010-01-21
  • 打赏
  • 举报
回复
"%[^\n]\n"
这句是只有1个字符的一行
就是第一个是 非\n 之后接一个 \n
jiaohuimin 2010-01-21
  • 打赏
  • 举报
回复
能不能详细解释一下呢?
查过了,但是还是不太明白,文件需要存放的格式,
"%[^\n]\n"
理解是匹配回车符,后一个回车符是什么意思就不明白了;

下面的这个语句完全看不明白了!麻烦解释一下吧
for (sym=0,tmp=99; tmp>1; sym++) {
tmp=sscanf(line,"%d %[0-9 ]",&val,line);
z569362161 2010-01-21
  • 打赏
  • 举报
回复
我也看不懂
sicxun 2010-01-21
  • 打赏
  • 举报
回复
"%[^\n]\n"
"%d %[0-9 ]"
这个是正则式啊
正则文法很简单的
wiki上查下就知道了

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧