Qt学习笔记之QString

标准C++提供了 两种字符串。一是C风格的以“\0”祝福语胡额为的字符数组,二是字符串类String。详见《深入浅出之string》。

一. 字符串类QString

QString 类是 Qt 中用于表示字符串的类,实现在 QtCore 共享库中。QString类保存了16位Unicode值,提供了丰富的操作、查询、换换等函数。该类还进行了使用隐私共享、高效的内存分配策略等多方面的优化。

Qstring();                                        // 构造空字符串
QString(QChar ch);                           // 由 QChar 对象 ch构造
QString(const QChar *pch, int size);    // 由 QChar 数组pch构造,size 是数组大小
QString(const QString &obj);              // 拷贝构造函数
QString(const char *str);                  //  由字符串 str 构造,str是一个普通字符串

二. 操作字符串

2.1 “+”操作符 

const QString operator+(const QString &s1, const QString &s2);       
const QString operator+(const QString &s1, const char *s2);
const QString operator+(const char s1, const QString &s2);
const QString operator+(const QString &s, char ch);
#include <QCoreApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "hello";
    str += " world";
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
输出结果是:
hello world

2.2 append函数

#include <QCoreApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "hello";
    str.append(" world");
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
输出结果:
hello world

2.3 sprintf函数

#include <QCoreApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str;
    str.sprintf("%s %s","hello","world");
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
输出结果:
hello world

2.4 arg函数

#include <QCoreApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str;
    str = QString("%1 %2").arg("hello").arg("world");
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
输出结果:
hello world

2.5 insert函数

//功能一般化的是在 QString 对象的任意位置插入另一个字符串或字符,如:
 QString &insert(int position, const QString &str);                   // 插入字符串 
 QString &insert(int position, const QChar *pch, int size);         // 插入 QChar 数组 
 QString &insert(int position, QChar ch);                               // 插入 QChar 对象
//这里 position 参数是要插入的位置,返回值也是对 QString 对象自己的引用。
#include <QCoreApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str;
    str.insert(0,"hello");
    str.insert(str.count()," world");
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
输出结果:
hello world

2.6 prepend函数 

 在原字符串的开头插入另一个字符串

#include <QCoreApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str;
    str.prepend(" world");
    str.prepend("hello");
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
结果输出:
hello world

2.7 replace函数

//以下是 QString 对象的替换操作,这三个函数的功能是将 QString 对象从 position 开始的 n 个字符替换为新内容,新内容分别由 QString 对象、QChar 数组 和 QChar 对象表示。
 QString &replace(int position, int n, const QString &after);           // QString 对象 
 QString &replace(int position, int n, const QChar *pch, int size);  // QChar 数组 
 QString &replace(int opsition, int n, QChar after);                         // QChar 对象
#include <QCoreApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "hello world";
    str.replace(0,2,"world");
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
结果输出:
worldllo world

 2.8 remove函数

//这个函数可以移除 QString 对象中从位置 position 开始的 n 个字符,下面两个成员函数则可以从 QString 对象中移除指定的字符串或字符:
 QString &remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive); 
 QString &remove(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive);
#include <QCoreApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "hello world";
    str.remove(0,2);
    qDebug("%s",str.toStdString().data());

    return a.exec();
}
输出结果:
llo world

 2.9 查找函数

//用以下的成员函数可以得到 QString 对象中某个特定字符串或字符出现的位置:这里参数 from 是查找的起点,它可以为负数,-i 表示倒数第i个字符。查找的方向是从前往后。返回值是查找到的字符串或字符的位置,如果没有找到则返回 -1。QString 类中还有与此功能相似的函数用于从后往前查找字符串或字符:
 int indexOf(const QString &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
 int indexOf(QChar ch, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;

 int lastIndexOf(const QString &str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; 
 int lastIndexOf(QChar ch, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

2.10 清空

//下面这个成员函数可以清空一个 QString 对象的内容,使之成为空字符串。
void clear();

 2.11 移除两端空白字符(包括回车符\n,换行符\r,制表符\t和空格符)

//下面这个成员函数可以截去 QString 对象中头部和尾部的空白字符:
//空白字符包括空格、回车、换行、制表符等字符。
QString trimmed() const;
//下面这个成员函数不仅能去掉 QString 对象头尾的空白字符,还能将中间的连续多个空白字符全部替换成一个空格:
QString simlified() const;

2.12 大小写转换

QString toLower() const;    // 转换为小写
QString toUpper() const;    // 转换为大写

2.13 截断

//而下面这个成员函数可以截断 QStrring 对象,也就是去掉指定位置后的所有内容:
void truncate(int position);      // 从位置 position 截断,位置从 0 开始编号
//下面这个成员函数可以截掉 QString 对象最后的若干个字符:
void chop(int n);     // 截掉最后的 n 个字符

 三. 查询字符串函数

 3.1 startsWith与endsWith函数

#include <QCoreApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "hello world";
    qDebug("%s",str.toStdString().data());
    qDebug("%d",str.contains("hello")); //! 是否以某字符串开头
    qDebug("%d",str.endsWith("world")); //! 是否以某字符串结尾

    return a.exec();
}

3.2 contains函数

//用以下的成员函数可以判断 QString 对象是否包含指定的字符串或字符
 bool contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;     
 bool contains(cosnt ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;

3.3 比较字符串

//QString 类提供了一个函数用于两个 QString 对象的比较:
int compare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs = Qt::CaseSensitive);
Qt::CaseInsensitive: //表示对大小写不敏感
Qt::Casesensitive :  //表示对大小写敏感
//返回值的含义如下:大于 0 表示 s1 大于 s2,等于 0 表示 s1 等于 s2, 小于 0 表示 s1 小于 s2

bool operator < (StringType other) const;        // 比较是否小于 other
bool operator <= (StringType other) const;      // 比较是否小于等于 other
bool operator == (StringType other) const;      // 比较是否等于 other
bool operator > (StringType other) constt;       // 比较是否大于 other
bool operator >= (StringType other) const;      // 比较是否大于等于 other
bool operator != (StringType other) const;       // 比较是否不等于 other

operator== 和 operator!=

  • operator== 用于检查两个字符串是否完全相等。
  • operator!= 用于检查两个字符串是否不相等。
QString str1 = "hello";
QString str2 = "world";
if (str1 == str2) {
    // 字符串相等时执行的代码
} else {
    // 字符串不相等时执行的代码
}

compare() 方法

  • compare() 方法提供了更灵活的比较选项,包括区分大小写和不区分大小写的比较。
  • 它返回一个整数,如果第一个字符串小于、等于或大于第二个字符串,则分别返回负值、0 或正值。
int result = str1.compare(str2, Qt::CaseInsensitive); // 不区分大小写的比较
if (result < 0) {
    // str1 在字典序上小于 str2
} else if (result == 0) {
    // str1 和 str2 相等
} else {
    // str1 在字典序上大于 str2
}

 localeAwareCompare() 方法

  • 这个方法提供了基于当前区域设置的字符串比较,这对于需要考虑本地化因素的应用程序很有用。
  • 它也返回一个整数,表示比较的结果。
int localeResult = str1.localeAwareCompare(str2);
// 根据返回值判断字符串的大小关系

 toLower() 和 toUpper() 方法结合比较

  • 如果你想要进行不区分大小写的比较,但 compare() 方法的 Qt::CaseInsensitive 选项不适用(比如在某些旧的Qt版本中),你可以手动将字符串转换为小写或大写,然后再进行比较。
if (str1.toLower() == str2.toLower()) {
    // 字符串在不区分大小写的情况下相等
}

 

 四 字符串转换

 4.1 将字符串转换为其他类型

//注意: 当字符串以 0x开头时,转换的基自动转换为16, 当字符串以0开头时,转换的基自动为8。
double toDouble(bool *ok = 0) const;                                     // 转换为高精度浮点数float toFloat(bool *ok = 0) cosnt;                                          // 转换为浮点数
int toInt(bool *ok, int base = 10) const;                                 // 转换为整型数
long toLong(bool *ok, int base = 10) cosnt;                            // 转换为长整型
short toShort(bool *ok, int base = 10) const;                          // 转换为短整型
uint toUInt(bool *ok = 0; int base = 10) const                         // 转换为无符号整型数
ulong toLong(bool *ok = 0, int base = 10) const;                     // 转换为无符号长整型数 
ushort toUShort(bool *ok = 0, int base = 10) const;                 // 转换为无符号短整型数
#include <QCoreApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "123";
    qDebug("%d",str.toInt());

    return a.exec();
}
输出结果是:123

4.2 将QString类型转换为QByteArray类型

QString 转 QByteArray

toAscii()返回一个ASCII编码的8位字符串(Qt5以上取消了)
toLatin1()返回一个Latin-1编码的8位字符串
toUtf8()返回一个Utf-8编码的8位字符串
toLocal8Bit()返回一个本地local编码字符串
#include <QCoreApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "hello world";
    QByteArray ba = str.toLatin1();
    qDebug("%s",ba.data());

    return a.exec();
}
输出结果:
hello world

QByteArray 转 QString 

QByteArray byteArray = ...; // 假设已经有一个QByteArray对象
QString qstr = QString::fromUtf8(byteArray); // 根据实际编码选择适当的方法

4.3. QString 与 std::string 转换 

QString 转 std::string

QString qstr = "Hello, QString!";
std::string str = qstr.toStdString();

std::string 转 QString

std::string str = "Hello, std::string!";
QString qstr = QString::fromStdString(str);

4.4. QString 与 char*(C风格字符串)转换

QString 转 char*

  • 使用toUtf8()toLatin1()toLocal8Bit()等方法将QString转换为QByteArray,然后使用data()constData()获取char*
  • 注意:返回的char*指针指向的是QByteArray的内部数据,因此要确保在QByteArray的生命周期内不要使用该指针。
    QString qstr = "Hello, QString!";
    QByteArray byteArray = qstr.toUtf8();
    char* cstr = byteArray.data();
    // 或者使用更安全的QString::toLatin1().constData()(如果确定字符串是Latin1编码)

  • 如果需要一个持久的C风格字符串,可以使用strdup()(在POSIX系统上)或手动分配内存并复制内容。

char* 转 QString

char* cstr = "Hello, C-style string!";
QString qstr = QString::fromUtf8(cstr); // 如果字符串是UTF-8编码
// 或者使用QString::fromLatin1(cstr)如果确定字符串是Latin1编码

4.5 注意事项

  • 当进行QStringchar*之间的转换时,要特别注意字符串的编码。QString内部使用UTF-16编码,而C风格字符串的编码则取决于您的环境和数据来源。
  • 使用toUtf8()toLatin1()等方法进行转换时,要确保目标环境支持相应的编码。
  • 在进行类型转换时,检查转换是否成功(例如,使用toInt()toDouble()ok参数)是一个好习惯。

五. 其他函数

5.1 null字符串与空字符串检测

QString().isNull()//true
QString().isEmpty()//true
QString("").isNull()//fase
QString("").isEmpty()//true

5.2 索引

//QString 类也像普通的字符串一样可以根据下标得到某个位置上的字符:
const QChar at(int position) const;
 //更直观的方法是用以下的操作符:
 const QChar operator[] (int position) const; 
 const QChar operator[] (uint position) const;
//上述QString 对象的取字符操作就类似于对一个字符数组的操作,但上述操作不能修改字符,事实上,通过[]操作符得到的字符还可以被修改,要用到另外两个重载的[]操作符:
 QCharRef operator[] (int position);
 QCharRef operator[] (uint position);  //返回的 QCharRef 类是一个辅助类,对它的修改将反映到原字符串中去。

5.3、统计

以下两个成员函数都可以得到 QString 对象中字符的个数,注意字符的个数并不一定等于字节数。
int size() const; 
int length() const;
//用以下的成员函数可以得到 QString 对象包含某个特定字符串或字符的个数:
 int count(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const; 
 int count(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
#include <QCoreApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString str = "hello world";
    qDebug("%d",str.size());
    qDebug("%d",str.length());
    qDebug("%d",str.count());

    return a.exec();
}
输出结果:
11
11
11

5.4 截断获取子字符串 

QString left(int n) const;      // 得到左边 n 个字符构成的子字符串
QString right(int n) const;    // 得到右边 n 个字符构成的子字符串
QString mid(int position, int n = -1) const;  // 从中间得到子字符串
//从中间得到子字符串时,参数 position 是子字符串的起始位置,参数 n 是字符串的个数,如果n 为 -1,则表示一直到原字符串的结尾。

六、QString比较

在Qt中,QString 类提供了多种方法来比较两个字符串。这些方法允许你检查两个字符串是否相等、是否不等、或者一个字符串是否在字典序上小于或大于另一个字符串。

以下是一些常用的 QString 比较方法:

operator== 和 operator!=

  • operator== 用于检查两个字符串是否完全相等。
  • operator!= 用于检查两个字符串是否不相等。
QString str1 = "hello";
QString str2 = "world";
if (str1 == str2) {
    // 字符串相等时执行的代码
} else {
    // 字符串不相等时执行的代码
}

compare() 方法

  • compare() 方法提供了更灵活的比较选项,包括区分大小写和不区分大小写的比较。
  • 它返回一个整数,如果第一个字符串小于、等于或大于第二个字符串,则分别返回负值、0 或正值。
int result = str1.compare(str2, Qt::CaseInsensitive); // 不区分大小写的比较
if (result < 0) {
    // str1 在字典序上小于 str2
} else if (result == 0) {
    // str1 和 str2 相等
} else {
    // str1 在字典序上大于 str2
}

localeAwareCompare() 方法

  • 这个方法提供了基于当前区域设置的字符串比较,这对于需要考虑本地化因素的应用程序很有用。
  • 它也返回一个整数,表示比较的结果。
int localeResult = str1.localeAwareCompare(str2);
// 根据返回值判断字符串的大小关系

toLower() 和 toUpper() 方法结合比较

  • 如果你想要进行不区分大小写的比较,但 compare() 方法的 Qt::CaseInsensitive 选项不适用(比如在某些旧的Qt版本中),你可以手动将字符串转换为小写或大写,然后再进行比较。
if (str1.toLower() == str2.toLower()) {
    // 字符串在不区分大小写的情况下相等
}

请注意,QString 的比较通常是基于UTF-16编码的字符进行的,这意味着在处理包含非BMP(基本多语言平面)字符(如某些表情符号)的字符串时,需要特别注意。此外,对于涉及区域设置的比较,最好使用 localeAwareCompare() 方法来确保正确的比较结果。

在实际应用中,选择哪种比较方法取决于你的具体需求,比如是否需要区分大小写、是否需要考虑本地化因素等。

七、QString实现同一串字符不同字体显示

在Qt中,QString 本身并不直接支持对字符串的不同部分应用不同的字体样式或大小。不过,你可以通过 QTextDocument 或 QLabel 等控件来实现这一效果。以下是使用 QTextDocument 的一个示例,该示例展示了如何在同一个字符串中设置不同部分的字体大小。

首先,你需要了解如何使用 HTML 标签来定义文本的样式。然后,将这些 HTML 标签嵌入到你的 QString 中,并使用 QTextDocument 或 QLabel 的 setHtml 方法来显示这个字符串。

以下是一个简单的示例代码:

#include <QApplication>
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QWidget window;
    QVBoxLayout *layout = new QVBoxLayout(&window);

    // 使用HTML标签来设置字体大小和换行
    QString htmlString = QString("<p><span style='font-size:24px;'>这是大字体部分<br></span><span style='font-size:12px;'>这是小字体部分,换行显示</span></p>");

    // 注意:虽然上面的HTML字符串在<br>标签后直接关闭了<span>,但在实际情况下,
    // 如果大字体部分和小字体部分紧挨着并且都需要换行,你应该将<br>放在需要换行的具体位置,
    // 并且确保每个<span>标签正确闭合(除非你有意让它们跨越多行)。
    // 更正确的做法可能是这样(如果你想要大字体部分后直接换行,然后显示小字体部分):
    QString correctedHtmlString = QString("<p><span style='font-size:24px;'>这是大字体部分</span><br><span style='font-size:12px;'>这是小字体部分,换行显示</span></p>");

    QLabel *label = new QLabel();
    label->setText(correctedHtmlString); // 设置HTML字符串到QLabel
    label->setTextFormat(Qt::RichText); // 确保QLabel以富文本格式显示内容

    layout->addWidget(label);
    window.setLayout(layout);
    window.show();

    return app.exec();
}

在这个示例中,我们创建了一个包含 HTML 标签的 QString,其中一部分文本使用了较大的字体 (font-size:24px),另一部分使用了较小的字体 (font-size:12px)。然后,我们创建了一个 QTextDocument 对象,并使用 setHtml 方法将 HTML 字符串设置到这个文档中。最后,我们将这个文档设置到一个 QLabel 中,并显示这个标签。

这种方法允许你在同一个字符串中混合使用不同的字体样式和大小。如果你需要更复杂的布局或样式,可以继续使用 HTML 和 CSS 的功能来扩展这个示例。

参考资料:

  1. https://www.cnblogs.com/retry/p/9328731.html#qstring-对象的比较
  2. C++ Qt开发:字符串QString容器-腾讯云开发者社区-腾讯云

<think>嗯,用户想了解Excel中的VLOOKUP函数的用法和参数含义。首先,我需要回忆一下VLOOKUP的基本结构。VLOOKUP是垂直查找函数,用于在表格的首列查找指定的值,然后返回该行中指定列的数据。它的四个参数分别是查找值、表格范围、列索引号和匹配模式。 接下来,我得确认每个参数的具体作用。第一个参数是lookup_value,也就是用户要查找的值,比如产品ID或者姓名。第二个参数是table_array,即查找的范围,这里要注意的是,查找值必须位于这个范围的第一列,否则函数无法正确工作。第三个参数是col_index_num,也就是用户想要返回的数据在表格范围中的第几列,这个列数是从表格范围的第一列开始算起的,不是整个工作表的列。第四个参数是range_lookup,决定是精确匹配还是近似匹配,通常用FALSE或0来指定精确匹配,避免错误。 然后,用户可能需要一个具体的例子来理解如何使用。比如,假设有一个产品价格表,用户想根据产品ID查找对应的价格。这时候,VLOOKUP就可以在ID列查找,然后返回价格列的数据。同时,要提醒用户注意表格范围最好使用绝对引用,比如$A$2:$C$100,这样在拖动公式时范围不会变化。 可能遇到的问题也需要考虑。比如,如果查找值不在表格的第一列,或者列索引号超过了表格的列数,函数会返回错误。此外,数据格式不一致也可能导致问题,比如查找值是数字,而表格中是文本格式的数字,这时候需要统一格式。还有,当出现#N/A错误时,可能是查找值不存在,或者匹配模式设置不正确,需要检查参数是否正确。 用户可能还会问到如何避免常见的错误,比如部分数据匹配出错的情况。这时候需要检查是否有多余的空格,或者数据格式不一致,或者表格范围没有锁定导致拖动时偏移。此外,XLOOKUP作为VLOOKUP的升级版,可能在某些情况下更方便,比如可以向左查找或者返回多列数据,这也是可以提及的内容。 最后,整理步骤,从基础语法到参数说明,再到具体案例,逐步引导用户理解如何使用VLOOKUP函数。同时,提供常见错误和解决方法,帮助用户在实际应用中避免问题。如果有必要,还可以比较VLOOKUP和其他查找函数的区别,比如HLOOKUP或XLOOKUP,但根据用户的问题,主要集中在VLOOKUP本身即可。</think>### Excel VLOOKUP函数详解 #### 一、基础语法与参数说明 VLOOKUP函数的语法为: $$=VLOOKUP(lookup\_value, table\_array, col\_index\_num, [range\_lookup])$$ 包含4个参数: 1. **lookup_value**(必填):要查找的值(如单元格引用或具体值) 2. **table_array**(必填):包含数据的表格范围(必须包含查找列和返回列) 3. **col_index_num**(必填):返回值所在列的序号(从table_array第一列开始计数) 4. **range_lookup**(可选):匹配类型 - `TRUE`/`1`:近似匹配(默认值,需数据升序排列) - `FALSE`/`0`:精确匹配(常用选项) [^1][^2] #### 二、使用步骤演示(工资表查询案例) 假设需要根据员工编号查询工资: 1. 建立查询单元格(如`B12`) 2. 输入公式: ```excel =VLOOKUP(A12, $A$2:$D$100, 4, 0) ``` - `A12`:待查询的员工编号 - `$A$2:$D$100`:锁定数据区域(绝对引用) - `4`:返回第4列(工资列) - `0`:精确匹配 [^2][^3] #### 三、常见错误与解决方法 | 错误现象 | 原因 | 解决方案 | |---------|------|---------| | #N/A | 查找值不存在 | 检查数据源或改用`IFERROR`容错 | | #REF! | 列序号超出范围 | 确认col_index_num ≤ 表格列数 | | 部分匹配失败 | 数据格式不一致 | 统一数值/文本格式 | | 结果错位 | 表格未锁定 | 使用`$`符号固定区域引用 | [^3][^4] #### 四、进阶技巧 1. **多条件查询**: 使用辅助列合并多个条件字段 ```excel =VLOOKUP(A2&B2, $D$2:$F$100, 3, 0) ``` 2. **通配符匹配**: `"*"`匹配任意字符,`"?"`匹配单个字符 ```excel =VLOOKUP("张*", $A$2:$C$100, 3, 0) ``` 3. **跨表查询**: 引用其他工作表数据 ```excel =VLOOKUP(A2, Sheet2!$A$2:$D$100, 4, 0) ``` [^1][^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩瀚之水_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值