C++,哪位大侠帮忙把下面这个程序每行注释下,谢谢!

#include <iostream>
#include <fstream>
using namespace std
void convert(char *str)
{
while (*str != '\0') {
if (*str >= 'a' && *str <= 'z')
*str += 'A' - 'a';
else if (*str >= 'A' && *str <= 'Z')
*str += 'a' - 'A';

++str;
}
}

int main()
{
char buf[1024];
FILE *s = fopen("src.txt", "rt");
FILE *d = fopen("dest.txt", "wt");
if (s == NULL || d == NULL) {
printf("open file error\n");
return -1;
}

while (fgets(buf, 1024, s) != NULL) {
convert(buf);
fputs(buf, d);
}

fclose(s);
fclose(d);
}
从一个文本文件读取正文,将其中的小写字母转化成大写字母,大写字母转换成小 写字母,其他字符不变,然后输出到另一个文本文件中保存。

#include <iostream>
#include <fstream>
using namespace std;//这里你少了一个分号,这是引用STL命名空间
void convert(char *str)//函数名,参数是字符串指针
{
while (*str != '\0') {//当指针没有指向字符串结尾时继续循环,UTF8/UTF32字符串结尾不是\0,因此这个方法在字符串存在中文时可能出错。
if (*str >= 'a' && *str <= 'z')//如果指针当前指向的字符是小写字符
*str += 'A' - 'a';//利用ASCII差值转换
else if (*str >= 'A' && *str <= 'Z')//如果指针当前指向的字符是大写字符
*str += 'a' - 'A';//利用ASCII码差值转换

++str;//指针向后移动一位,指向下一个字符。
}
}

int main()//主函数
{
char buf[1024];//定义一个字符数组
FILE *s = fopen("src.txt", "rt");//打开指定的文件,输入字符流
FILE *d = fopen("dest.txt", "wt");//打开指定的文件,输出字符流
if (s == NULL || d == NULL) {//如果打开文件失败
printf("open file error\n");//提示打开失败
return -1;//退出程序
}

while (fgets(buf, 1024, s) != NULL) {//读文件
convert(buf);//执行转换
fputs(buf, d);//写文件
}

fclose(s);//销毁文件指针
fclose(d);//同上。
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-04
#include <iostream>
#include <fstream>
using namespace std;//别漏了分号

void convert(char *str)//函数,参数为一个指针,其指向一个char字符串(数组)
{
while (*str != '\0') //传入参数(指针指向的内容(的首个元素))如果不为空,此处用于做结束判断,如果运行到传入字符串结尾则退出
{
if (*str >= 'a' && *str <= 'z')//传入参数>=‘a’、<='z',小写字母
*str += 'A' - 'a';//指针当前指向内容加上(‘A’-‘a’的差值),如:a+(A-a) = A,即转换为大写字母
else if (*str >= 'A' && *str <= 'Z')//大写字母
*str += 'a' - 'A';//转换为小写字母

++str;//指针加法,将指针指向传入参数的下一个字母
}
}

int main()
{
char buf[1024];
FILE *s = fopen("src.txt", "rt");
FILE *d = fopen("dest.txt", "wt");
if (s == NULL || d == NULL) {
printf("open file error\n");
return -1;
}

while (fgets(buf, 1024, s) != NULL) {
convert(buf);
fputs(buf, d);
}

fclose(s);
fclose(d);
}
第2个回答  2012-07-04
#include <iostream>
#include <fstream> //文件操作需要的头文件
using namespace std
void convert(char *str) //该函数就是把大写变小写 小写变大写
{
while (*str != '\0') { //判断字符串是否结束
if (*str >= 'a' && *str <= 'z') //判断是否是小写字符
*str += 'A' - 'a';
else if (*str >= 'A' && *str <= 'Z') //判断是否是大写字符
*str += 'a' - 'A';

++str;
}
}

int main()
{
char buf[1024];
FILE *s = fopen("src.txt", "rt"); //只读打开一个文本文件,只允许读数据
FILE *d = fopen("dest.txt", "wt"); //只写打开或建立一个文本文件,只允许写数据
if (s == NULL || d == NULL) { //文件打开失败 输出错误 结束程序
printf("open file error\n");
return -1;
}

while (fgets(buf, 1024, s) != NULL) { //从文件指针s中读取1023个字符,存到以buf为起始地 址的空间里,直到读完一行,如果成功则返回s的指针,否则返回NULL。
convert(buf); //调用convert函数 进行转换
fputs(buf, d); //把buf中的内容写入到文件指针d指向的文件中
}

fclose(s); //关闭文件
fclose(d);
}追问

啊 谢谢大侠啦啊 主函数中的if (s == NULL || d == NULL)是什么意思? NULL是什么意思啊 ?

第3个回答  2012-07-04
同学 这个程序的意思都知道了 还要问每句代码的意思追问

啊 这个也是我找人编的 我得画程序设计图 所以。。。

追答

那也不用知道每句代码的意思 你只要知道 程序每个模块的作用 至于细节方面你可以自己加工

追问

额 谢谢 前面的字符转换我懂 我们有学过 后面的文件复制就不太懂啦 谢谢啊 楼下有答案啦

第4个回答  2012-07-04
不懂!

C++,哪位大侠帮忙把下面这个程序每行注释下,谢谢!
using namespace std;\/\/这里你少了一个分号,这是引用STL命名空间 void convert(char *str)\/\/函数名,参数是字符串指针 { while (*str != '\\0') {\/\/当指针没有指向字符串结尾时继续循环,UTF8\/UTF32字符串结尾不是\\0,因此这个方法在字符串存在中文时可能出错。if (*str >= 'a' && *s...

哪位大侠帮我解释一下下面每句代码的意思,谢谢啦……#include<stdafx.h...
stdafx.h这个名称是可以改变的,你可以指定预编译头文件的名称。这个只在vc中有用,并不是c++的特性,vc中可以在这里声明全局变量和ID的地方

C++运行时出错,请大侠指导:error C2275: "std::ifstream": 将此类...
ifstream是一种类型,C++在调用函数的时候,参数不用写类型的。所以你这里只要写成 vector<string> svec=store_file(is);就可以了。C++在函数的声明和定义中才需要写参数的类型。

请问各位大侠下面c++代码: cout<<*(a+i)[j]<<endl; cout<<*(a+3*0...
因为[]的优先级比*高,所以,*(a+i)[j]就是*((a+i)[j]) ,即,第三行第一列的那个元素。第二条是*(a+1),a+1,移到第二行,即4,5,6那行,然后*(a+1)就是第二行的首地址了,这个值嘛会是多少就不大清楚了,,,

C++中1.#INFP是什么意思呀,哪位大侠告诉我一下,不盛感激
应该是您的浮点数内容不正常,即内容非法,例如下面的程序就会输出类似的内容:include<stdio.h> void main(){ long num[2] = {0xffffffff,0xffffffff};printf("%lf\\n",*(double*)num);}

我是C++语言初学者 有点问题。。。 下面的程序不是我想要的结果 哪位大...
z=x*y; 这句必须放在在读入x和y之后啊,放在前面的话x、y的值都还是系统给的默认值。你想想,x y都还没输入呢,z就能等于x*y了?多照着一些标准的代码打打,熟练了,这种错误就少很多了。

...+((x^y)>>1)的功能是取两个数的平均值,哪位大侠可以帮我解释下啊...
(x&y)+((x^y)>>1),把x和y里对应的每一位(指二进制位)都分成三类,每一类分别计算平均值,最后汇总。其中,一类是x,y对应位都是1,用x&y计算其平均值;一类是x,y中对应位有且只有一位是1,用(x^y)>>1计算其平均值;还有一另是x,y中对应位均为0,无须计算。下面我再分别说明一...

C++ 大侠 帮看下这段小程序。 关于写电子邮件的。个人认为有些地方是...
第一你的头文件名都用错啦,应把前四行的#clude换成#include.然后有以下错误:1:error C2065: 'assert' : undeclared identifier。2:error C2001: newline in constant。3:error C2065: 'pause' : undeclared identifier。4:error C2143: syntax error : missing ')' before 'string'。5:...

<<C++语言程序设计>>中的第一题,我编了以下程序,可老出错,想请各位大侠...
(1)题目的意思是:"当输入:"后面的那句"How about you?"和"输入:"后的那句"OK"是由你从键盘中输入的,其它的都由程序自动输出 (2)你存在很多语法错误 比如C++中是分大小写的,可你的代码中大小写不分;类成员函数的定义格式也不对 建议你先看一下C++基础教材,先掌握语法,模仿教材上的设计 incl...

各位大侠帮我我看下下面C++代码哪里是错误的,谢谢!
void main(){ HMODULE MKM;WNDCLASS windows;MKM=GetModuleHandle(0);windows.style=0;windows.lpfnWndProc=WndProc;} \/\/定义函数指针 long CALLBACK WndProc(HWND hWnd, \/\/ handle to window UINT Msg, \/\/ message WPARAM wParam, \/\/ first message parameter LPARAM lParam \/\/ seco...

相似回答