功能介绍
1、可检测出英文内容中某个单词出现的次数
2、可从英文内容中提取以某个字母为首的所有单词
3、可将修改的内容从新保存到txt文件中
源代码
.pro文件
无增改
.h文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public : Widget(QWidget *parent = nullptr); ~Widget(); QString aFilename; //添加部分 private slots: void on_openpushButton_clicked(); //添加部分(无需手动添加) void on_savepushButton_clicked(); //添加部分(无需手动添加) void on_numpushButton_clicked(); //添加部分(无需手动添加) void on_wordpushButton_clicked(); //添加部分(无需手动添加) private : Ui::Widget *ui; }; #endif // WIDGET_H |
.cpp文件(不含main函数的那个)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
#include "widget.h" #include "ui_widget.h" #include<QFileDialog> Widget::Widget(QWidget *parent) : QWidget(parent) , ui( new Ui::Widget) { ui->setupUi( this ); ui->findtextEdit->setText( "将检索内容复制于此!" ); ui->resulttextEdit->setText( "检索结果显示于此!" ); } Widget::~Widget() { delete ui; } void Widget::on_openpushButton_clicked() //用来打开一个txt文本文件 { QString curpath=QDir::currentPath(); QString dlgTitle= "打开一个文件" ; QString filter= "程序文件(*.h *.cpp);;文本文件(*.txt);;所有文件(*.*)" ; aFilename=QFileDialog::getOpenFileName( this ,dlgTitle,curpath,filter); QFile afile(aFilename); afile.open(QIODevice::ReadOnly|QIODevice::Text); ui->findtextEdit->setText(afile.readAll()); afile.close(); } void Widget::on_savepushButton_clicked() //用以保存txt文本文件 { QFile afile(aFilename); afile.open(QIODevice::WriteOnly|QIODevice::Text); QString str=ui->findtextEdit->toPlainText(); QByteArray strbyte=str.toUtf8(); afile.write(strbyte,strbyte.length()); afile.close(); } bool is_word(QString s) //用于判断字符是否为英文字符 { QByteArray byte = s.toUtf8(); if (( int (byte.at(0))>=65&& int (byte.at(0))<=90)||( int (byte.at(0))>=97&& int (byte.at(0))<=122)) { return true ; } else { return false ; } } bool delete_thesame(QString &word,QStringList &w_list) //相同的单词将不进行二次存储,保证检索处来的每个单词具有唯一性 { for ( int i=0;i<w_list.size();i++) { if (w_list.at(i).compare(word,Qt::CaseInsensitive)==0) { return false ; } } return true ; } void get_word( int &index,QString &word,QStringList &w_list,QString &str) //将目标单词单词进行添加存储 { while (index+1<=str.length()&&is_word(str.at(index))) { word+=str.at(index); index++; } if (delete_thesame(word,w_list)) { w_list.append(word); } word= "" ; } void Widget::on_numpushButton_clicked() { QString word=ui->wordlineEdit->text(); //获取内容 int NUM=0; //初始化检索单词次数为0 QString text = ui->findtextEdit->toPlainText(); QStringList number_list = text.split( "\n" ); for ( int i = 0; i < number_list.size(); ++i) { int is_ok=1; //若为0,则表明字符串中已经没有我们需要的单词了 int index=-word.length(); QString str0= ":" +number_list.at(i)+ ":" ; //“:”是为了方便后面的编程 while (is_ok) { index=str0.indexOf(word,word.length()+index); //这里需要去理解indexof函数的作用 if (index!=-1){ if (!is_word(str0.at(index+word.length()))&&!is_word(str0.at(index-1))) //判断目标单词是否为一个个体,即该单词的首尾是否为非英文字符(上面“:”的作用体现于此) NUM++; } else { is_ok=0; } } } ui->numlineEdit->setText(QString::number(NUM,10)); } void Widget::on_wordpushButton_clicked() { int A_is_a; int index=0; //是否发现on_numpushButton_clicked()函数中也出现如下两句 QString text = ui->findtextEdit->toPlainText(); QStringList word_list = text.split( "\n" ); //判断yesradioButton和noradioButton按钮是否被选中 if (ui->yesradioButton->isChecked()) A_is_a=1; if (ui->noradioButton->isChecked()) A_is_a=0; QString none=ui->alphabetlineEdit->text(); //获取内容 QString word; QStringList w_list; for ( int i = 0; i < word_list .size(); ++i) { QString str = word_list .at(i); index=0; //初始化检索下标为0 while (index+1<=str.length()) { if ((index==0||!is_word(str.at(index-1)))&&is_word(str.at(index))) //若该字符为英文,且其前面为非英文 { switch (A_is_a) { case 1: if (none.compare(str.at(index))==0) { get_word(index,word,w_list,str); } else { while (index+1<=str.length()&&is_word(str.at(index))) { index++; } } break ; case 0: if (none.compare(str.at(index),Qt::CaseInsensitive)==0) { get_word(index,word,w_list,str); } else { while (index+1<=str.length()&&is_word(str.at(index))) { index++; } } break ; default : break ; } } else { index++; } } } ui->resulttextEdit->clear(); for ( int i=0;i<w_list.count();i++) { ui->resulttextEdit->append(w_list.at(i)); } } |
.ui文件
对应程序中的自定义控件名称如下:
findtextEdit:3
resulttextEdit:4
wordlineEdit:6
numlineEdit:9
alphabetlineEdit:5openpushButton:1
savepushButton:2
numpushButton:7
wordpushButton:8yesradioButton:是
noradioButton:否
Label控件仅仅在ui中修改标题内容,程序中没有其它操作,所以作者选择默认系统给的名称。
到此这篇关于QT实现单词检索软件的示例代码的文章就介绍到这了,更多相关QT 单词检索软件内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_44672122/article/details/122550275