QT中QString的练习的解决以及个人总结

QT中关于字符串的练习

问题描述:

从键盘输入字符串,有小写形式的字母串、大写形式的字母串以及数字形式的字母串,将其转换为大写、小写、整数以及实数类型,并显示输出。

问题解决:
  1. 首先对输入进来的字符串进行循环判断,使用QT中QChar提供的一系列的判断函数。
  2. 由于并没有太过于强调以及特殊要求,所以对于数字形式的判断就是:遇到数字就开始计数,包括小数点,将其转换为实数形式。
  3. 并且是创建ui界面,比硬编码好的多!简单一点,先尝试有ui界面的,嘿嘿嘿。
  • 尚未解决再原有字符串上进行修改后单击按钮得到的数字和不是重新算出来的,而是在原有基础上再次进行加
  • 用正则表达式来进行字符匹配,还没有达到目的,用正则表达式进行匹配并输出
  • 没有实现使用qDebug来实现输出。
    QT控件布局
    在Dialog.h中添加:
#include <QString>
#include <QChar>

给ui界面中的按钮单击右键跳转至槽函数中,给槽函数添加一下代码:

static float sum=0.0;
    int m,n;
    QString str1,str2;
    str1=ui->lin1->text();//获取字符串

    for(int i=0;i<str1.length();i++)//循环判断
    {
        if(str1[i].isLower())
            str1[i]=str1[i].toUpper();
        else if(str1[i].isUpper())
                str1[i]=str1[i].toLower();
            else if(str1[i].isNumber())
                {
                    m=i;//数字开始的位置
                    int k=i;//记录数字结束的位置
                    while(str1[k].isNumber()||str1[k]=='.')
                    {
                        k++;//判断,并记录
                    }
                    n=k-1;//数字的最后一位aDbc123.45
                    sum=sum+str1.mid(m,n-m+1).toFloat();//求和
                    str1=str1.remove(m,n-m+1);//删除数字
                   i--;//修改i的值控制下一轮判断的开始
                }
            }

    ui->lin2->setText(str1);
    ui->lin3->setText(QString::number(sum));
个人总结:

不能太相信老师所提的,所以还是要自己学习,QT的ui界面创建比无ui界面的要简单,所以时间允许的话,可以再考虑考虑硬编码,锻炼一下自己的代码能力、加强QT学习。

问题描述:

输入一个有空格的串S,利用函数去掉左右的空格,再输入一个子串t,查找S中包含的所有t的起始位置,再从S中删除所有的子串t。

问题解决:
  1. 利用QString中的trimmed()函数去掉两端空格
  2. 利用QString中的indexOf()函数检测子串第一次出现的位置
  3. 利用QString中的remove()函数去掉所有出现的子串
  • 尚未解决的是显示所有子串位置的时候没有用空格分开
  • 在检测子串所有位置的时候判断条件复杂化了
  • 在删除子串之后又调用了一次去空格函数
    ui界面布局
    在Dialog.h中添加
#include <QLineEdit>
#include <QLabel>
#include <QMessageBox>

在去掉空格的按钮的槽函数中添加:

QString str1,str2;
   str1=ui->lin1->text();//接收输入的字符串

   str2=str1.trimmed();//去掉左右(两端)的空格
    //QMessageBox::about(this,"warning",str2);//测试是否成功
    ui->lin2->setText(str2);

在查找的槽函数中添加代码:

 QString str1,str2,str3,str4,str5;

    str1=ui->lin1->text();

    str2=ui->lin3->text();

    str5=str1;

    int x=str1.indexOf(str2);//检索出第一次位置

    x=str1.indexOf(str2);

    do
    {
        str3+=QString::number(x);
        x=str1.indexOf(str2,x+1);
        ui->lin4->setText(str3);
    }while(x>-1);//查找所有的子串出现的位置

    //删除所有的字符串t
    str4=str5.remove(str2);
    str4=str4.trimmed();
    ui->lin5->setText(str4);

在适当的时候添加代码去调试想要的效果,是在C语言学习时留下来的习惯,有人一直觉得很多余,但是确实,在写代码的时候在调试修改,要花费很大的力气,但是能保证最后的成品是自己想要的,而不是到时候完成后再查找错误。

最后:

希望能够尽自己的努力去把QT学好,也希望有人在我的代码的基础上,进一步帮我解决我尚未解决的问题呀!
也会进一步加强自己的代码能力!
共勉!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值