这是一个为输入姓氏和姓氏的用户创建用户名的程序。
用户名=用户的第一个首字母+最多7个字母的用户姓氏。
Ex:约翰史密斯成为了“jsmith'
John Smoother成为了' jsmoothe'
#include <iostream>
#include <string>
using namespace std;
int main()
{
string fullname, fname, lname, uname, u2;
int l, len;
cout<<"FULLNAME: ";
getline(cin, fullname);
l=fullname.length();
cout<<"Fullname length: "<<l<<endl;
/*
len=0;
while (len!=(l-1))
{
if (fullname[len]!=' ')
len++;
else
break;
}
fname=fullname.substr(0,len);
lname=fullname.substr(len+1, (l-len));
*/
cout<<"FName: "<<fname<<endl;
cout<<"LName: "<<lname<<endl;
if(isupper(fname[0]))
{
fname[0]=fname[0] + 32;
}
if(isupper(lname[0]))
{
lname[0]=lname[0] + 32;
}
cout<<"FName: "<<fname<<endl;
cout<<"LName: "<<lname<<endl;
uname=fname.substr(0,1);
u2=lname.substr(0,7);
uname+=u2;
cout<<"USERNAME: "<<uname;
return 0;
}
我很难理解我在评论之间放置的代码块( /.../ )。
答案 0 :(得分:0)
这是一个愚蠢的代码,所以不要试图理解它。如果你自己编写代码会好得多。在这种情况下,你不会问这样的问题。
代码的作者尝试计算第一个非空格字符,然后使用方法substr
提取它们并将它们放在fname
中。剩余的字符放在lname
。
考虑到代码无效。例如,输入的字符串可以以空格开头。在两个名称之间也可以有多个空白。 而且,如果它是例如
,它会好得多fname[0] = tolower( fname[0] );
而不是
fname[0]=fname[0] + 32;
我认为您需要将名称的所有字符转换为小写字母。
答案 1 :(得分:-2)
很简单,如果你的字符串是&#34; John Hoffman&#34;,len将等于4