c/c++语言 数据读入 字符串 整型字符 交叉读入 要代码
怎样将以下的数据读入?37s...##..#..............#......#...####...#......e5s...#.#..........#.......
怎样将以下的数据读入?
3
7
s...##.
.#.....
.......
..#....
..#...#
###...#
......e
5
s...#
.#...
.....
..#..
..#.e
7
s...##.
.#.....
.......
..#....
..#...#
###...#
......e
(输入的第一行为一个整数m,表示迷宫的数量。 其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长,接下来的n行每行n个字符,字符之间没有空格分隔。) 展开
3
7
s...##.
.#.....
.......
..#....
..#...#
###...#
......e
5
s...#
.#...
.....
..#..
..#.e
7
s...##.
.#.....
.......
..#....
..#...#
###...#
......e
(输入的第一行为一个整数m,表示迷宫的数量。 其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长,接下来的n行每行n个字符,字符之间没有空格分隔。) 展开
展开全部
if(str[i]数字) 转换为int
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
假定数据存 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)[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);
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询