我有一个作业,用户以以下格式输入学生姓名(姓,名)。您能帮我弄清楚如何将大写的名字和姓氏的首字母大写吗?
我正在使用它来将用户输入转换为数组,所以我可以将首字母大写,但是当我这样做时,我很难使它在for循环之外工作。
for (int x = 0; x < fName.length(); x++)
{
fName[x] = tolower(fName[x]);
}
fName[0] = toupper(fName[0]);
答案 0 :(得分:1)
我使用了您的代码,只是添加了一些解析。你真的很亲密如果您对代码有疑问,请告诉我。
我不能帮助自己。对于用户输入,我总是使用getline()后跟一个stringstream来解析该行中的单词。我发现它避免了很多让我陷入流沙的边缘情况。
当getline()获得输入时,除非有问题,否则它将返回true。如果用户输入Ctrl-d,它将返回false。 Ctrl-D基本上是EOF(文件末尾)代码,在这种情况下(只要您不尝试从调试器内部输入Ctrl-d即可。)该代码很好用。我的不喜欢。
请注意,我使用std :: string代替数组。可以将std :: string视为数组进行下标,但是它打印效果很好,并具有其他功能,可以更好地处理字符串。
#include <iostream>
#include <string> // Allow you to use strings
#include <sstream>
int main(){
std::string input_line;
std::string fName;
std::string lName;
std::cout << "Please enter students as <lastname>, <firstname>\n"
"Press ctrl-D to exit\n";
while(std::getline(std::cin, input_line)){
std::istringstream ss(input_line);
ss >> lName;
// remove trailing comma. We could leave it in and all would work, but
// it just feels better to remove the comma and then add it back in
// on the output.
if(lName[lName.size() - 1] == ',')
lName = lName.substr(0, lName.size() - 1); // Substring without the comma
ss >> fName;
for (int x = 0; x < fName.length(); x++) // could start at x=1, but this works.
{
fName[x] = tolower(fName[x]); // make all chars lower case
}
fName[0] = toupper(fName[0]);
for (int x = 0; x < lName.length(); x++)
{
lName[x] = tolower(lName[x]);
}
lName[0] = toupper(lName[0]);
std::cout << "Student: " << lName << ", " << fName << std::endl;
}
}