嘿,对不起,如果问了很多,但我不知道这里的问题是什么。
在下面的C ++代码中,我正在读取用户定义的输入文件并生成输出。我一直在一块一块地写它,把它放在一起,编译,测试等等,当我去解决bug时。这对我来说是一次学习经历,我猜第一个自我指导的课程......
无论如何,当我运行代码时,命令提示符打印一行并且没有响应。我会说它已经陷入了某种循环,但我相信这是不可能的。
我认为它可能与我试图声明的数组有关,我想创建一个动态字符串数组,但我发现这很难......
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cctype>
#include <string>
using namespace std;
int wordCount(string line)
{
int fpos, fpos2;
int count = 0;
fpos = line.find_first_not_of(' ');
line.erase(0, fpos);
while(line.size() > 0)
{
fpos = line.find_first_of(' ');
if(line.at(0) == '"')
{
line.erase(0, 1);
for(int i = 0; i <line.size(); i++)
if(line.at(i) == '"' && line.at(i-1) != '\\')
{
fpos2 = i;
break;
}
line.erase(0, fpos2 + 2);
}
else
line.erase(0, fpos + 1);
count++;
}
return count;
}
int main()
{
//Current line; Input file; Output file;
string currentline, fileName, outFileName;
ifstream fin;
ofstream fout;
cout << "Enter input file name: ";
getline(cin, fileName);
cout << "Enter output file name: ";
getline(cin, outFileName);
fin.open(fileName.c_str());
if (!fin.good()) throw "I/O error";
fout.open(outFileName.c_str());
if (!fout.good()) throw "I/O error";
getline(fin, currentline);
while (!currentline.empty())
{
int pos, pos1;
pos = currentline.find("//");
string postScript = currentline.substr(pos+2,-1);
pos = currentline.find_first_of(';');
string xline = currentline.substr(0,pos+1);
cout << xline << endl;
int size = wordCount(xline);
string *words;
words = (string *) malloc (size*sizeof(string));
words = new string[size];
pos = xline.find_first_not_of(' ');
xline.erase(0, pos);
for ( int i = 0; i < size; i++ )
{
pos = xline.find_first_of(' ');
if ( xline.at(0) == '"' )
{
xline.erase(0, 1);
for(int a = 0; a < xline.size(); a++) //This for loop finds the end of a quoted statement within the line.
if ( xline.at(a) == '"' && xline.at(a-1) != '\\' )
{
pos = a;
break;
}
words[i] = xline.substr(0,pos);
xline.erase(0,pos + 2);
}
else
{
words[i] = xline.substr(0,pos);
xline.erase(0,pos + 1);
}
cout << words[i] << endl;
}
cout << xline << endl << endl;
getline(fin, currentline);
}
return 0;
}
答案 0 :(得分:1)
我建议你注释掉一些代码,直到它开始以你期望的方式工作(通常这个有问题的位会变得很明显。)一旦你弄清楚什么是错的,你可以在StackOverflow上问一个更具体的问题。
答案 1 :(得分:0)
您应该使用调试器来调查程序行为。
为避免单步执行整个程序,可以设置希望传递序列的断点。如果未触发断点,则可以使用上一点的单步执行。此外,您可以查看变量内容。
答案 2 :(得分:0)
它永远找不到结束语:
if ( xline.at(a) == '"' && xline.at(a-1) != '\\' )
{
pos = a;
break;
}
请改为尝试:
if (xline.at(a) == '"')
{
pos = a;
break;
}
你只需要转义“如果它包含在一个字符串文字中,例如”这个文字中有“这里有一个”“