所以我有一个编程项目,这是迄今为止我必须做的最困难的项目。我们会收到一份文件,其中列出了人员的姓名,生日和工资。除此之外,我们必须确保每个名称都以正确的方式格式化(LASTNAME,FIRST MIDDLE(如果有的话))...目前,以下代码用于提取其姓氏,假设格式不正确(第一个中期最后一次)。该文件的第一行是 Matthew Alan Aberegg 1963 452,627 而正确的输出将是 Aberegg,Matthew Alan 1963 452,627
我还要做其他一些事情,但这就是我被困的地方。这特别困难,因为有些名称只有第一个和最后一个,只有一些名称格式不正确。我评论了第一个while循环,因为我试图让它甚至只为一个名称工作。
作为旁注,评论" cout"在开头只显示我添加一个endl;到最后......否则它完全被忽略了。在整个代码中似乎都是这种情况。我真的不明白这是怎么回事,但无论如何,我有比这更大的问题。
在Mac上使用Eclipse,如果这会改变任何内容。
我确定有一些误用cctype函数或我可以缩短代码的方法。欢迎任何建议! 感谢任何帮助,说真的,我已经坚持了太长时间。
#include <iostream>
#include <string>
#include <fstream>
#include <cctype>
using namespace std;
int main() {
//cout << "test";
ifstream fileIn; // for input files
ofstream fileOut; // for output files
string currentLine; // for analyzing current line
fileIn.open("oldretirement.txt");
fileOut.open("newretirement.txt"); // TODO: move this closer to where it's needed
// TODO: make sure file opens first (while loop?)
int count = 0; // for parsing through each line
int count2 = 0; // for rearranging the name TODO: rename/is this needed?
int pos; // finds the position of first comma
string name; // for rearranging the name if not in correct format
bool rearranged = false; // for rearranging, true if the name is rearranged
//while(!fileIn.eof()){ // while the file is not at its end
getline(fileIn, currentLine);
//cout << currentLine;
for(count = 0; count < currentLine.length(); count++){
pos = currentLine.find_first_of(',');
// cout << pos<<endl;
if(isdigit(currentLine[pos-1])){
count2 = 0;
while(count2 < currentLine.length()){ // change this condition?
if(isdigit(currentLine[count2])){
cout << count2 <<endl; //test
count2 = count2 - 2; // goes back
while(!isspace(currentLine[count2])){
count--;
}
name = currentLine.substr(count2, currentLine.find(" "));
}
count++;
}
}
}
// }
fileIn.close();
fileOut.close();
return 0;
}