【问题标题】:QStringList generating Username from StringQStringList 从字符串生成用户名
【发布时间】:2015-03-01 12:30:52
【问题描述】:

我正在尝试编写一个简单的程序,该程序采用用户输入的全名,例如“Peter Mills”,并根据名字的第一个字母和姓氏的前 4 位生成用户名?

所以输出应该是“pmill”

我到底是怎么做到的。我对 Qt 还是很陌生,请有人为我解释一下。这就是我现阶段所拥有的

#include <QCoreApplication>
#include <iostream>
#include <QString>
#include<QStringList>
#include <QTextStream>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextStream cin(stdin);
    QTextStream cout(stdout);

    QString fullName;

    cout << "Enter Your Full Name: " << endl;
    cin >> fullName;

    QStringList username = fullName.split(" ");
    username[0]=username[0][1];

    QString usernameJoin = username.join("");
    cout << "Full name is : " << fullName << endl;
    cout << "Username is : " << usernameJoin << endl;





    return a.exec();
}

【问题讨论】:

  • QString 结果 = 用户名[0].left(1)+用户名[1].left(4);。假设名字和姓氏中没有空格,并且都足够长(进行错误检查)。
  • 我不需要对此作业进行错误检查。如果我运行这个,我只会得到名字的第二个字母?
  • 嗯,cin 在单词边界处停止,所以您实际上只阅读了名字。

标签: c++ qt


【解决方案1】:

这是一个基于您的代码的示例,可以满足您的需求:

QTextStream cin(stdin);
QTextStream cout(stdout);

QString firstName, lastName;

cout << "Enter Your Full Name: " << endl;
cin >> firstName >> lastName;

QString userName = (firstName.left(1)+lastName.left(4)).toLower();

cout << "Full name is : " << firstName << ' ' << lastName << endl;
cout << "Username is : " << userName << endl;

cin 停在单词边界处,因此您必须分两次读取名字和姓氏。

然后你可以使用QString::left(int n)获取QString的最左边的n个字符,使用QString::toLower()将结果转换为小写。

这正是我们上面使用的,我们把名字的前1个字符,姓的前4个字符,放在一起,然后将结果转换为小写。

【讨论】:

  • 如果我使用 QInputDialog,还有其他方法吗?我可以在不提示名字和姓氏分开的情况下这样做吗?
  • @Vaaljan 如果你使用 QInputDialog,那么你会得到一个 QString,我们称之为 input,你可以用 firstName =input.split(" ")[0]lastName = input.split(" ")[1] 做同样的事情
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 2018-09-27
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2016-10-22
相关资源
最近更新 更多