程序输入/输出文件和查找字符串

时间:2015-11-25 08:04:44

标签: string

初学C ++学生,这是第一个编程课。目前正在学习字符串函数和输入/输出文件。试图将一个程序放在一起,这个程序将以大写和小写的形式查看名为“john”或“JOHN”的现有文件。然后将结果输出到另一个文件中。

我们被告知我们可以将名称的所有实例转换为大写或小写(我选择了大写),因此程序将输出名称的实例,无论它是什么情况。

我在下面注意到我遇到了我的一个问题而且我可能还有其他一些我还看不到的地方。想知道你们中的任何一个人是否可以帮助我解决这个问题。

以下是我到目前为止所提到的错误。

非常感谢你的时间和帮助!!!

#include <fstream>
#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

bool die(const string & msg);

bool input(string & s, const string & prompt);

bool open(ifstream & fin, const string & fileName);

bool open(ofstream & fout, const string & fileName);

//bool name(const string & line);

bool convert(string & str, string & converted);

int main() {

    string inName, outName;
    ifstream fin;
    ofstream fout;

    if (!input(inName, "Name of input file: "))
       die("I can't read the name of the input file");

    if (!open(fin, inName))
       die("I can't open " + inName + " for output");

    if (!input(outName, "Name of output file: "))
       die("I can't read the name of the input file");

    if (!open(fout, outName))
       die("I can't open " + outName + " for output");

for (string converted; getline(fin, converted);) {

    if (convert(converted)) //<---***HAVING AN ISSUE HERE***
        fout << converted << endl;


   }

if (fin.rdstate() != (ios::failbit | ios::eofbit))
    die("Input file " + inName + " terminated input incorrectly");

fout.close();
  if (!fout)
      die("Output file " + outName + "had a problem with writing or closing");

fin.close();

cout << "read from " << inName << ", wrote to " << outName << ", ok" <<         endl;

}// main

  bool die(const string & msg){
  cout << "Fatal error: " << msg << endl;
  exit(EXIT_FAILURE);
}

  bool input(string & s, const string & prompt) {

  cout << prompt;
  return getline(cin, s) ? true : false;

}

  bool open(ifstream & fin, const string & fileName){

  fin.open(fileName);
  return fin ? true : false;

}

  bool open(ofstream & fout, const string & fileName){

  ifstream tin(fileName);
  if (tin) return false;
  fout.open(fileName);
  return fout ? true : false;
  }

//bool name(const string & line){


   //return line.find("john") != UINT_MAX;

//}

bool convert(string & str, string & converted)
{
  for (short i = 0; i < str.size(); ++i)
      converted += toupper(str[i]);
  return converted.find("john") != UINT_MAX;
}

我得到的错误:

错误1错误C2660:'convert':函数不带1个参数第40行

警告2警告C4018:'&lt;' :签名/未签名不匹配第93行

3智能感知:函数调用第40行中的参数太少

1 个答案:

答案 0 :(得分:0)

嗯,错误信息几乎说明了一切。声明convert函数接受两个参数,但是你只传入一个参数。

bool convert(string & str, string & converted)

您需要传递另一个带有转换后的字符串的字符串引用。

偏离主题:此外,为了安全起见(也许您以后想要切换到其他编程语言):请不要开始学习考虑所有not 0true的坏习惯}。

以下情况迟早会引起麻烦:

return fin ? true : false;