字符串;子。不理解代码块

时间:2014-05-21 21:07:52

标签: c++ string

这是一个为输入姓氏和姓氏的用户创建用户名的程序。

用户名=用户的第一个首字母+最多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;
}

我很难理解我在评论之间放置的代码块( /.../ )。

2 个答案:

答案 0 :(得分:0)

这是一个愚蠢的代码,所以不要试图理解它。如果你自己编写代码会好得多。在这种情况下,你不会问这样的问题。

代码的作者尝试计算第一个非空格字符,然后使用方法substr提取它们并将它们放在fname中。剩余的字符放在lname

考虑到代码无效。例如,输入的字符串可以以空格开头。在两个名称之间也可以有多个空白。 而且,如果它是例如

,它会好得多
fname[0] = tolower( fname[0] );

而不是

fname[0]=fname[0] + 32;

我认为您需要将名称的所有字符转换为小写字母。

答案 1 :(得分:-2)

很简单,如果你的字符串是&#34; John Hoffman&#34;,len将等于4