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