在C++中怎么把文件内容cad读入图案文件时出错怎么解决到一个字符数组中而不是字符串变量或指针

在C或C++中可以在文件中读取字符串写入字符串变量或数组吗?_百度知道
在C或C++中可以在文件中读取字符串写入字符串变量或数组吗?
要求从student.txt中把各项信息分别读取写入字符串变量或二维数组。。。我是想写入后进行信息筛选的!!或者看到以下题目有好的其他建议~
补充:完成这题加分::1.通讯信息管理:将本班学生的信息(包括学号、姓名、性别、家庭住址、联系方式,存放于文件...
我有更好的答案
设计:1. 单行存放。student.txt中每行存放一个学生的各项信息,即以换行符为区别各条学生信息。读取的时候从文件中每次提取一行来做属性判断,并筛选;2. tab隔属性。当然也可以以其他符号,但一般来说,在学生信息内容中,一般不会使用table符号,则可以用table符号来在每行学生信息中分隔每项属性(学号、姓名等),这样可以通过跃进一个或多个table符号,找到关心的属性,并进行判断(住址头4个字节是否是“广州”、性别属性是否为“女”等)。同时也可以在输出时选择输出部分属性了。关键代码://1. read a single line from a filechar* getFileLine(FILE *argInputFile, char *argLine){
for(int i = 0; (c = getc(argInputFile)) != EOF && c != '\n'; i++){
argLine[i] =
argLine[i] = '\0';
return argL}//2. read a single property from the information line/** * @param *argStuInfo: some student's information which was read by function 'getFileLine()' * @param argPropertyNo: the position of the property to be read.
if the properties's order is like this: StuNo. (\t)Name(\t)Gender(\t)Addr(\t)others *
in the student info, and you want to read the gender of this student, then *
you should call this function like this:
getProperty(stuInfoLine, 3, gender); */char* getProperty(const char *argStuInfo, const int argPropertyNo, char *argProperty){
count = 1;
for(int i = 0; (c = getc(argInputFile)) != '\0' && count & argPropertyNo; i++){
if(c == '\t'){
for(int i = 0; (c = getc(argInputFile)) != '\0' && c != '\t'; i++){
argProperty[i] =
argProperty[i] = '\0';
return argP}没检查和编译过,差不多就是这样了。有了这些函数就可以判断类似住址头4个字节是否是“广州”、性别属性是否为“女”等这些条件了。ps:c中对文件的操作:stdio.h头文件中定义了对文件的引用类型:FILE 及其基本操作:#include &stdio.h&...FILE *filePointerfilePointer = fopen(&c://student.txt&, &rw&);int ch = getc(filePointer);putc('a', filePointer);
采纳率:7%
扫描算法在文件数据操作上总是有效和高效的
为您推荐:
其他类似问题
字符串的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。c++如何读取一个文件中的一部分字符串内容_百度知道
c++如何读取一个文件中的一部分字符串内容
文件内容MM5 net010 B1 vss! vss! NMOS_3P3 W=3.02426e-6 L=350.498e-9 然后提取
输出急~~~~~~~~~~~~~~~~~~~
我有更好的答案
先将文件全部读入 char* 变量。再用 string 类 构建函数建一个string 对象,在把 char* 内容放入。下面是将文件全部读入char */* fread example: read an entire file */ #include &stdio.h& #include &stdlib.h& int main () { FILE * pF long lS char * size_ pFile = fopen ( &myfile.bin& , &rb& ); if (pFile==NULL) {fputs (&File error&,stderr); exit (1);} // obtain file size: fseek (pFile , 0 , SEEK_END); lSize = ftell (pFile); rewind (pFile); // allocate memory to contain the whole file: buffer = (char*) malloc (sizeof(char)*lSize); if (buffer == NULL) {fputs (&Memory error&,stderr); exit (2);} // copy the file into the buffer: result = fread (buffer,1,lSize,pFile); if (result != lSize) {fputs (&Reading error&,stderr); exit (3);} /* the whole file is now loaded in the memory buffer. */ // terminate fclose (pFile); free (buffer); return 0; }构建函数建一个string 对象,把 char * buffer 内容存入 程序部分,请自己补充:#include &windows.h&#include&iostream&#include &string&#include &stdio.h&// 插入上面程序 .....// 补充sss.assign(buffer,result);cout && sss &&
首先算出文件内容长度,用file_L = sizeof(文件名);其次把要比较的内容放到数组buff1,文件的内容放到数组buff2,
for(j=0;j&11;j++)//要比较11个字符for(i=0;i&file_L;i++)if(buff1[j]==buff[i]){
printf(&%d%d&,i,buff1[j]);// 跳出本次盾环}有了这些参考只要你懂一些调试方法,相信你是能做出来的,如果我把全部程序贴出来,对你个人而言是没好处的,此法请借签,谢谢
本回答被提问者和网友采纳
可以使用到字符串函数的substr()函数,包含在头文件&cstring&中;针对你上面的问题,可以先将文件内容全部保存在一个字符串str中,(可以包括空格一起写入,也可以不保存空格;为了节约我这里讲的是不保存空格的方式)1、将文件内容读取出来并保存到str中,那么str中的内容是“MM5net010B1vss!vss!NMOS_3P3W=3.00.498e-9”;2、定义二个新的字符串str1,str2;3、给str1、str2赋值:
str1=str.substr(0,3);
str2=str.substr(19,8);4、经过上面的处理后,str1、str2得到的字符串就是你想要的了。LZ,关于str的相关函数还请你自己下去研究研究就能理解了!
文件字符读出来放到数组中 遇到空格或者换行符时进行串匹配
其他1条回答
为您推荐:
其他类似问题
字符串的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。c++中如何将字符串变量的值赋给字符数组变量_百度知道
c++中如何将字符串变量的值赋给字符数组变量
例如我定义了string f1=&abcd&;char c1[10];如何将f1赋值给c1
我有更好的答案
我们知道,同类型的变量之间可以相互赋值,但是对于同类型的数组来说,却是个例外。即使类型、元素个数都相同,也不能彼此赋值,要想赋值的唯一办法就是:以数组的元素为单位进行操作。对于您的问题,可以有以下程序解决:main(){
string f1=&abcd&;
char c1[10];
for(i=0;i&10;i++)
if(f1[i]=='\0')/*检测源数组元素是否为空,YES,执行赋值,NO,退出*/
c1[i]=f1[i];
采纳率:53%
两种方法强制类型转换CString thestring(_T(&char test&));LPTSTR lpsz=(LPTSTR)(LPCTSTR)使用strcpyCString thestring(_T(&char test&));LPTSTR lpsz=new TCHAR[thestring.GetLength()+1];strcpy(lpsz,thestring);
strcpy(c1,f1.c_str());
(1)strcpy(c1,f1.c_str());(2)memcpy(c1,f1.c_str(),f1.size());(3)循环赋值(4)memmove(c1,f1,c_str(),f1.size());PS:STL string是不能强制类型转化成char*的,只能(char*)f1.c_str()
char c1[10]={&abcd&]
strcat(c1,f1);
其他3条回答
为您推荐:
其他类似问题
字符数组的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。c++中怎么把一个字符串赋给一个变量_百度知道
c++中怎么把一个字符串赋给一个变量
1.我想把一个字符串赋给一个变量,不知怎么弄.输出呢?2.字符串数组如何得到.例如str[5]是一个字符串的数组,现在想在str[1]中存储&ABC&,在str[2]中存储&ABCDE&,在str[3]中存储&ABCDEF&....请问像这样的赋值和输出应该怎么实现呢?谢谢!
我有更好的答案
对于string型的变量,直接赋值即可,如string str=&abcde&;使用string类需要使用头文件#include &string&对于char数组型的变量,在声明时可以直接赋值,如char str[] = &abcde&,对于char数组型的变量,在非声明的时候赋值时,不能直接赋值,如char str[64];str = &abcde&;是不允许的,需要借助strcpy函数进行赋值,需要使用头文件#include &string.h&。使用方法:char&str[64];strcpy(str,&&abcde&);//将abcde拷贝到str数组中。
采纳率:84%
来自团队:
问题一的解决:这个问题通常有两种解决方法,一个是字符数组(现已不常用)另一个是string类,当然这个要在头文件中加上#include&string&代码如下:#include&iostream&#include&string&]int main(){
string str=&abcd&;
cout&&}或者是#include&iostream&int main(){
char *ch=&abc&;
}或者是#include&iostream&int main(){
char ch[3]=&abc&;
//〔〕中可以是3也可以是其它任意数
cout&&}问题二的解决:定义数组时用定义或用结构体或类来解决#include&iostream&int main(){
string str[3];for(int i=0;i&3;++i)
cin&&str[i];for(int i=0;i&3;++i)
cout&&str[i];}
本回答被提问者采纳
可以使用:strcpy(str, &ABC&);strcpy(str,&ABCDE&);但是有一点要注意,str的空间大小要够存放后面的字符串.这样就可以把ABC赋值给str了.包含头文件:#include &string.h&字符串数组可以如下定义:char *str[3]={&ABC&,&ABCDE&,&AAAA&}如果对str[0]赋值,同样可以用上面的函数strcpy(str[0], &sfdsfsd&);在C++中,可以使用C++标准库中的string类,定义str = &ABC&;str = &ABCDE&这个要添加如下头文件#include &string&
cin&&str//输入数组strcin&&str[1]&&str[2]//输入字符串str[1]和str[2]cout&&str
//输出数组strcout&&str[1]//输出字符串str[1]
char* str[5]{ABC, ABCDE,ABCDEF};使用指针就可以了
其他2条回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C++中字符串以及数组和指针的互相使用讲解
转载 &更新时间:日 17:07:31 & 投稿:goldensun
这篇文章主要介绍了C++中字符串以及数组和指针的互相使用讲解,是C++入门学习中的基础知识,需要的朋友可以参考下
C++字符串与指针
在C++中可以用3种方法访问一个字符串(在第5章介绍了前两种方法)。
用字符数组存放一个字符串
【例】定义一个字符数组并初始化,然后输出其中的字符串。
#include &iostream&
int main( )
char str[]="I love CHINA!";
cout&&str&&
运行时输出:
I love CHINA!
用字符串变量存放字符串
【例】定义一个字符串变量并初始化,然后输出其中的字符串。
#include &string&
#include &iostream&
int main( )
string str="I love CHINA!";
cout&&str&&
用字符指针指向一个字符串
【例】定义一个字符指针变量并初始化,然后输出它指向的字符串。
#include &iostream&
int main( )
char *str="I love CHINA!";
cout&&str&&
对字符串中字符的存取,可以用下标方法,也可以用指针方法。
【例】将字符串str1复制为字符串str2。
定义两个字符数组str1和str2,再设两个指针变量p1和p2,分别指向两个字符数组中的有关字符,通过改变指针变量的值使它们指向字符串中的不同的字符,以实现字符的复制。
#include &iostream&
int main( )
char str1[]="I love CHINA!",str2[20],*p1,*p2;
p1=str1;p2=str2;
for(;*p1!='\\0';p1++,p2++)
*p2='\\0';
p1=str1;p2=str2;
cout&&"str1 is: "&&p1&&
cout&&"str2 is: "&&p2&&
运行结果为:
str1 is: I love CHINA!
str2 is: I love CHINA!
这个例子用来说明怎样使用字符指针。其实,对例6.13来说,用string变量来处理是十分简单的:
string str1=″I love CHINA!″,str2; //定义string变量
str2=str1; //将str1复制到str2
C++数组与指针
指向数组元素的指针
一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。所谓数组元素的指针就是数组元素的地址。
int a[10];
//定义一个整型数组a,它有10个元素
int *p; //定义一个基类型为整型的指针变量p
p=&a[0]; //将元素a[0]的地址赋给指针变量p,使p指向a[0]
在C++中,数组名代表数组中第一个元素(即序号为0的元素)的地址。因此,下面两个语句等价:
在定义指针变量时可以给它赋初值:
int *p=&a[0]; //p的初值为a[0]的地址
也可以写成
int *p=a; //作用与前一行相同
可以通过指针引用数组元素。假设p已定义为一个基类型为整型的指针变量,并已将一个整型数组元素的地址赋给了它,使它指向某一个数组元素。如果有以下赋值语句:
*p=1; //对p当前所指向的数组元素赋予数值1
如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。
如果p的初值为&a[0],则:
1) p+i和a+i就是a[i]的地址,或者说,它们指向a数组的第i个元素,见图6.12。
2) *(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即a[i]。
可以看出,[]实际上是变址运算符。对a[i]的求解过程是: 先按a+i×d计算数组元素的地址,然后找出此地址所指向的单元中的值。
3) 指向数组元素的指针变量也可以带下标,如p[i]与*(p+i)等价。
根据以上叙述,引用一个数组元素,可用以下方法:
下标法,如a[i]形式;
指针法,如*(a+i)或*(p+i)。其中a是数组名,p是指向数组元素的指针变量。如果已使p的值为a,则*(p+i)就是a[i]。可以通过指向数组元素的指针找到所需的元素。使用指针法能使目标程序质量高。
【例】输出数组中的全部元素。假设有一个整型数组a,有10个元素。要输出各元素的值有3种方法:
1) 下标法。
#include &iostream&
int main( )
int a[10];
for(i=0;i&10;i++)
cin&&a[i]; //引用数组元素a[i]
for(i=0;i&10;i++)
cout&&a[i]&&" "; //引用数组元素a[i]
运行情况如下:
9 8 7 6 5 4 3 2 1 0↙
(输入10个元素的值)
9 8 7 6 5 4 3 2 1 0
(输出10个元素的值)
2) 指针法。
将上面程序第7行和第10行的“a[i]”改为“*(a+i)”,运行情况与(1)相同。
3) 用指针变量指向数组元素。
#include &iostream&
int main( )
int a[10];
int i,*p=a; //指针变量p指向数组a的首元素a[0]
for(i=0;i&10;i++)
cin&&*(p+i); //输入a[0]~a[9]共10个元素
for(p=a;p&(a+10);p++)
cout&&*p&&" "; //p先后指向a[0]~a[9]
运行情况与前相同。请仔细分析p值的变化和*p的值。
对3种方法的比较:
方法(1)和(2)的执行效率是相同的。第(3)种方法比方法(1)、(2)快。这种方法能提高执行效率。
用下标法比较直观,能直接知道是第几个元素。用地址法或指针变量的方法都不太直观,难以很快地判断出当前处理的是哪一个元素。在用指针变量指向数组元素时要注意: 指针变量p可以指向有效的数组元素,实际上也可以指向数组以后的内存单元。如果有
int a[10], *p=a;
//指针变量p的初值为&a[0]
cout&&*(p+10);
//要输出a[10]的值
在使用指针变量指向数组元素时,应切实保证指向数组中有效的元素。
指向数组元素的指针的运算比较灵活,务必小心谨慎。下面举几个例子。
如果先使p指向数组a的首元素(即p=a),则:
1) p++(或p+=1)。使p指向下一元素,即a[1]。如果用*p,得到下一个元素a[1]的值。
2) *p++。由于++和*同优先级,结合方向为自右而左,因此它等价于*(p++)。作用是: 先得到p指向的变量的值(即*p),然后再使p的值加1。例6.5(3)程序中最后一个for语句:
for(p=a;p&a+10;p++)
可以改写为
for(p=a;p&a+10;)
cout&&*p++;
3) *(p++)与*(++p)作用不同。前者是先取*p值,然后使p加1。后者是先使p加1,再取*p。若p的初值为a(即&a[0]),输出*(p++)得到a[0]的值,而输出*(++p)则得到a[1]的值。
4) (*p)++表示p所指向的元素值加1,即(a[0])++,如果a[0]=3,则(a[0])++的值为4。注意: 是元素值加1,而不是指针值加1。
5) 如果p当前指向a[i],则
&&& *(p--)&&& 先对p进行“*”运算,得到a[i],再使p减1,p指向a[i-1]。
&&& *(++p)&& 先使p自加1,再作*运算,得到a[i+1]。
&&& *(--p)&& 先使p自减1,再作*运算,得到a[i-1]。
将++和--运算符用于指向数组元素的指针变量十分有效,可以使指针变量自动向前或向后移动,指向下一个或上一个数组元素。例如,想输出a数组100个元素,可以用以下语句:
while(p&a+100)
cout&&*p++;
while(p&a+100)
在用*p++形式的运算时,很容易弄错,一定要十分小心,弄清楚先取p值还是先使p加1。
用指针变量作函数参数接收数组地址
在前面介绍过可以用数组名作函数的参数。前面已经多次强调: 数组名代表数组首元素的地址。用数组名作函数的参数,传递的是数组首元素的地址。很容易推想: 用指针变量作函数形参,同样可以接收从实参传递来的数组首元素的地址(此时,实参是数组名)。下面用指针变量作函数形参。
【例】将10个整数按由小到大的顺序排列。在例5.7程序的基础上,将形参改为指针变量。
#include &iostream&
int main( )
void select_sort(int *p,int n); //函数声明
int a[10],i;
cout&&"enter the originl array:"&&
for(i=0;i&10;i++) //输入10个数
cin&&a[i];
select_sort(a,10); //函数调用,数组名作实参
cout&&"the sorted array:"&&
for(i=0;i&10;i++) //输出10个已排好序的数
cout&&a[i]&&" ";
void select_sort(int *p,int n) //用指针变量作形参
int i,j,k,t;
for(i=0;i&n-1;i++)
for(j=i+1;j&n;j++)
if(*(p+j)&*(p+k)) k=j; //用指针法访问数组元素
t=*(p+k);*(p+k)=*(p+i);*(p+i)=t;
C++编译系统将形参数组名一律作为指针变量来处理。
实际上在函数调用时并不存在一个占有存储空间的形参数组,只有指针变量。
实参与形参的结合,有以下4种形式:
实& 参&&&&&&&&&&&&&&&& 形& 参
数组名&&&&&&&&&&&&& 数组名&&&&&&&
数组名&&&&&&&&&&& 指针变量&&&&&
指针变量&&&&&&&&& 数组名
指针变量&&&&&&& 指针变量
在此基础上,还要说明一个问题: 实参数组名a代表一个固定的地址,或者说是指针型常量,因此要改变a的值是不可能的。如:
a++; //语法错误,a是常量,不能改变
而形参数组名是指针变量,并不是一个固定的地址值。它的值是可以改变的。在函数调用开始时,它接收了实参数组首元素的地址,但在函数执行期间,它可以再被赋值。如:
f(array[], int n)
cout&& //输出array[0]的值
array=array+3; //指针变量array的值改变了,指向array[3]
cout&&*arr&& //输出array[3]的值
多维数组与指针
用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。
1) 多维数组元素的地址
设有一个二维数组a,它有3行4列。它的定义为:
int a[3][4]={{1,3,5,7},{9,11,13,15},{17,18,21,23}};
a是一个数组名。a数组包含3行,即3个元素:a[0],a[1],a[2]。而每一元素又是一个一维数组,它包含4图6.14个元素(即4个列元素),例如,a[0]所代表的一维数组又包含4个元素: a[0][0], a[0][1], a[0][2], a[0][3]。可以认为二维数组是“数组的数组”,即数组a是由3个一维数组所组成的。
从二维数组的角度来看,a代表二维数组首元素的地址,现在的首元素不是一个整型变量,而是由4个整型元素所组成的一维数组,因此a代表的是首行的起始地址(即第0行的起始地址,&a[0]),a+1代表a[1]行的首地址,即&a[1]。
a[0],a[1],a[2]既然是一维数组名,而C++又规定了数组名代表数组首元素地址,因此a[0]代表一维数组a[0]中0列元素的地址,即&a[0][0]。a[1]的值是&a[1][0],a[2]的值是&a[2][0]。
0行1列元素的地址可以直接写为&a[0][1],也可以用指针法表示。a[0]为一维数组名,该一维数组中序号为1的元素显然可以用a[0]+1来表示。
欲得到a[0][1]的值,用地址法怎么表示呢?既然a[0]+1是a[0][1]元素的地址,那么,*(a[0]+1) 就是a[0][1]元素的值。而a[0]又是和*(a+0)无条件等价的,因此也可以用*(*(a+0)+1)表示a[0][1]元素的值。依此类推,*(a[i]+j)或*(*(a+i)+j)是a[i][j]的值。
2) 指向多维数组元素的指针变量
① 指向数组元素的指针变量
【例】输出二维数组各元素的值。这里采用的方法是用基类型为整型的指针变量先后指向各元素,逐个输出它们的值。
#include &iostream&
int main( )
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
//p是基类型为整型的指针变量
for(p=a[0];p&a[0]+12;p++)
cout&&*p&&" ";
运行结果如下:
1 3 5 7 9 11 13 15 17 19 21 23
关于指向数组元素的指针变量的几点说明:
p是指向整型数据的指针变量,在for语句中对p赋初值a[0],也可以写成“p=&a[0][0]”。
循环结束的条件是“p&a[0]+12”,只要满足p&a[0]+12,就继续执行循环体。
执行“cout&&*p;”输出p当前所指的列元素的值,然后执行p++,使p指向下一个列元素。
②指向由m个元素组成的一维数组的指针变量
可以定义一个指针变量,它不是指向一个整型元素,而是指向一个包含m个元素的一维数组。这时,如果指针变量p先指向a[0](即p=&a[0]),则p+1不是指向a[0][1],而是指向a[1],p的增值以一维数组的长度为单位,见图6.17。
【例】输出二维数组任一行任一列元素的值。
#include &iostream&
int main( )
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int (*p)[4],i,j;
cin&&i&&j;
cout&&*(*(p+i)+j)&&
运行情况如下:
由于执行了“p=a”,使p指向a[0]。因此p+2是二维数组a中序号为2的行的起始地址(由于p是指向一维数组的指针变量,因此p加1,就指向下一个一维数组)。*(p+2)+3是a数组2行3列元素地址。*(*(p+2)+3)是a[2][3]的值。
3) 用指向数组的指针作函数参数
一维数组名可以作为函数参数传递,多维数组名也可作函数参数传递。
【例】输出二维数组各元素的值。题目与例6.7相同,但本题用一个函数实现输出,用多维数组名作函数参数。
#include &iostream&
int main( )
void output(int (*p)[4]); //函数声明
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
output(a); //多维数组名作函数参数
void output(int (*p)[4]) //形参是指向一维数组的指针变量
for(i=0;i&3;i++)
for(j=0;j&4;j++)
cout&&*(*(p+i)+j)&&" ";
运行情况如下:
1 3 5 7 9 11 13 15 17 19 21 23
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 c++文件读入 的文章

 

随机推荐