c/c++语言 数据读入 字符串 整型字符 交叉读入 要代码

怎样将以下的数据读入?37s...##..#..............#......#...####...#......e5s...#.#..........#....... 怎样将以下的数据读入?
3
7
s...##.
.#.....
.......
..#....
..#...#
###...#
......e
5
s...#
.#...
.....
..#..
..#.e
7
s...##.
.#.....
.......
..#....
..#...#
###...#
......e
(输入的第一行为一个整数m,表示迷宫的数量。 其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长,接下来的n行每行n个字符,字符之间没有空格分隔。)
展开
 我来答
Rankabc
2014-02-04 · TA获得超过3561个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1067万
展开全部
if(str[i]数字) 转换为int
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金色潜鸟
2014-02-04 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5701万
展开全部
假定数据存 abc.txt
先读一下全文件,看一共需要存放多少行。
然后动态分配数组 char (*p)[17];
回绕文件,重新读文件,把数据存入 char (*p)[17];
如果你要存放 n 也可以,根据m, 自己动态 开个数组。
(根据字符串长度也可以知道这个迷宫的n) .

#include <stdio.h>
int main(){
FILE *fp;
int m,n,N=0;
int j,i;
char one_line[50];
char (*p)[17];
fp=fopen("abc.txt","r");
fgets(one_line,50,fp);
sscanf(one_line,"%d",&m);
for (j=0;j<m;j++)
{
fgets(one_line,50,fp);
sscanf(&one_line[0],"%d",&n);
N=N+n;
for (i=0;i<n;i++){
fgets(one_line,50,fp);
}
}
p = (char (*) [17] ) malloc(sizeof(char *) * 17 * N); // 动态分配
rewind(fp); // 回绕文件
fgets(one_line,50,fp);
N=0;
for (j=0;j<m;j++)
{
fgets(one_line,50,fp);
sscanf(&one_line[0],"%d",&n);
for (i=0;i<n;i++){
fgets(p[N],50,fp); // 读一行
p[N][strlen(p[N])-1] ='\0'; // 把行末的'\n' 换成 '\0'
N++;
}
}
fclose(fp);
// printf("N=%d\n",N);
for (i=0;i<N;i++) printf("%s\n",p[i]);
return 0;
}
追问
能不用动态分配将它读入吗?(求代码!)
但是还是谢谢啦!
追答
可以,开一个大的数组。例如:
char p[100][17];
fp=fopen("abc.txt","r");
N=0;
for (j=0;j<m;j++)
{
fgets(one_line,50,fp);
sscanf(&one_line[0],"%d",&n);
for (i=0;i<n;i++){
fgets(p[N],50,fp); // 读一行
p[N][strlen(p[N])-1] ='\0'; // 把行末的'\n' 换成 '\0'
N++;
}
}
fclose(fp);
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式