求解,关于getline读取的空格和去除代码注释解决方法
求解,关于getline读取的空格和去除代码注释
好吧,在编一个程序,用来计算源代码中的行数以及取出代码中for语句与if语句的一个程序,以下是代码:
#include <iostream>
#include<string>
#include<fstream>
using namespace std;
int ReadLine();
//int ReadFor();
void main()
{
int L;
L=ReadLine();
cout<<"代码总共"<<L<<"行"<<endl;
int m;
cin>>m;
}
int ReadLine()
{
fstream dataFile;
string File;
int num=0;
cout<<"请输入文件位置和文件名:";
cin>>File;
dataFile.open(File,ios::in|ios::out);
if(!dataFile)
{
cout<<"文件打开失败,检查文件名或文件路径是否输错!"<<endl;
exit(0);
}
while (!dataFile.eof())
{
string arr;
//dataFile>>arr;
getline(dataFile,arr);
int n=arr.length();
//for(int j=0;j<n;j++)
// {
// if(n-j>2)
// {if(arr[j]=='/'&&arr[j+1]=='/')
// arr=arr.substr(0,j);}}
num++;
//string F="for";
//string I="if";
if(arr=="\n")
--num;
for(int i=0;i<n;i++)
{
if(n-i>3)
{
if(arr[i]=='f'&&arr[i+1]=='o'&&arr[i+2]=='r')
cout<<num<<"行"<<"for语句"<<arr<<endl;
}
if(n-i>2)
{
if(arr[i]=='i'&&arr[i+1]=='f')
cout<<num<<"行"<<"if语句"<<arr<<endl;
}
}
}
return num;
}
在测试时 在计数的时候,把代码文件中的空行也计算进去了,以上红色字体为,写的取出空行的代码,貌似没有用,求教各位大神,这个该如何弄呢,而且把代码行读入到arr中时,空格也进去了,如何在读取时就忽略掉空格呢,剩下的就是那个去除注释了。。。。
------解决方案--------------------
读入一行 比如
pos = str_line.find(str1); // 查找 str1 替换成 str2
查找 // 的位置,然后替换成 "空" 就可以了
好吧,在编一个程序,用来计算源代码中的行数以及取出代码中for语句与if语句的一个程序,以下是代码:
#include <iostream>
#include<string>
#include<fstream>
using namespace std;
int ReadLine();
//int ReadFor();
void main()
{
int L;
L=ReadLine();
cout<<"代码总共"<<L<<"行"<<endl;
int m;
cin>>m;
}
int ReadLine()
{
fstream dataFile;
string File;
int num=0;
cout<<"请输入文件位置和文件名:";
cin>>File;
dataFile.open(File,ios::in|ios::out);
if(!dataFile)
{
cout<<"文件打开失败,检查文件名或文件路径是否输错!"<<endl;
exit(0);
}
while (!dataFile.eof())
{
string arr;
//dataFile>>arr;
getline(dataFile,arr);
int n=arr.length();
//for(int j=0;j<n;j++)
// {
// if(n-j>2)
// {if(arr[j]=='/'&&arr[j+1]=='/')
// arr=arr.substr(0,j);}}
num++;
//string F="for";
//string I="if";
if(arr=="\n")
--num;
for(int i=0;i<n;i++)
{
if(n-i>3)
{
if(arr[i]=='f'&&arr[i+1]=='o'&&arr[i+2]=='r')
cout<<num<<"行"<<"for语句"<<arr<<endl;
}
if(n-i>2)
{
if(arr[i]=='i'&&arr[i+1]=='f')
cout<<num<<"行"<<"if语句"<<arr<<endl;
}
}
}
return num;
}
在测试时 在计数的时候,把代码文件中的空行也计算进去了,以上红色字体为,写的取出空行的代码,貌似没有用,求教各位大神,这个该如何弄呢,而且把代码行读入到arr中时,空格也进去了,如何在读取时就忽略掉空格呢,剩下的就是那个去除注释了。。。。
------解决方案--------------------
读入一行 比如
pos = str_line.find(str1); // 查找 str1 替换成 str2
查找 // 的位置,然后替换成 "空" 就可以了
- C/C++ code
#include <iostream> using namespace std; int main() { string strline = "pos = str_line.find(str1); // 查找 str1 替换成 str2"; string::size_type pos; pos = strline.find("//"); if (pos != string::npos) { strline.replace(strline.begin() + pos, strline.end(), "删除注解"); } cout << strline << endl; return 0; }