其他分享
首页 > 其他分享> > c – 使用上部错误?工作代码,直到我进入toupper

c – 使用上部错误?工作代码,直到我进入toupper

作者:互联网

我的程序就像它应该工作一样,直到我将toupper部分添加到我的程序中.我已经尝试查看我的错误代码,但它并没有真正帮助.错误是:

no matching function to call
2 arguments expected, one provided

所以我知道错误是在我的while循环中的那两个语句中.我做错了什么?

我想做个名字

john brown
go to
John Brown

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;

int main(){

  string firstname[5];
  string lastname[5];
  ifstream fin( "data_names.txt" );
  if (!fin) {
    cout << "There is no file" << endl;
  }
  int i = 0;
  while( i < 5 && (fin >> firstname[i]) && (fin >> lastname[i]) ) {
    firstname[0] = toupper(firstname[0]);
    lastname[0] = toupper(lastname[0]);
    i++;
  }
  cout << firstname[0] << " " << lastname [0] << endl;
  cout << firstname[1] << " " << lastname [1] << endl;
  cout << firstname[2] << " " << lastname [2] << endl;
  cout << firstname[3] << " " << lastname [3] << endl;
  cout << firstname[4] << " " << lastname [4] << endl;

  return 0;
}

解决方法:

std::toupper适用于单个字符,但您尝试将其应用于字符串.除了添加#include< cctype>之外,还需要修改while循环体:

firstname[i][0] = toupper(firstname[i][0]);
lastname[i][0] = toupper(lastname[i][0]);
i++;

然后它应该按预期工作. Live demo here

正如M.M在评论中有用地指出的那样,你还应该在访问他们的第一个字符之前检查你的字符串是否为空,即类似

if (!firstname[i].empty()) firstname[i][0] = toupper(...);

强烈推荐.

请注意,如果你得到像麦当劳这样的名字,你可能需要更复杂的逻辑:)

标签:toupper,c
来源: https://codeday.me/bug/20190828/1755784.html