linux下gtk编写的并交集合运算器

发布于 2022-10-15 08:05:11 字数 7070 浏览 15 评论 0

题目:集合并,交,差的运算程序,集合元素限定小写字母,结果按照字母顺序显示,目前我只做了并的运算,就出现了乱码的问题

  1. #include <gtk/gtk.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. typedef struct LNode
  5. {
  6. char  data;
  7. struct LNode *next;
  8. }LNode,*LinkList;
  9.                
  10. GtkWidget *window;
  11. GtkWidget *entry1;
  12. GtkWidget *entry2;
  13. GtkWidget *button1;
  14. GtkWidget *button2;
  15. GtkWidget *button3;
  16. GtkWidget *label;
  17. GtkWidget *table;        
  18. LinkList CreateList (int j)                     //将文本框的text创建线性链表
  19. {
  20. char txt[26];
  21. int i;
  22. LinkList L;
  23. LNode *p,*q;
  24. if(j=0)
  25. strcpy(txt,gtk_entry_get_text(GTK_ENTRY(entry1)));     //第一个文本框的text
  26. else               
  27. strcpy(txt,gtk_entry_get_text(GTK_ENTRY(entry2)));     //第二个文本框的text
  28. L=(LinkList)malloc(sizeof (LNode));   
  29. L->next=NULL;
  30. q=L;
  31. for(i=0;txt[i]!=NULL;i++)
  32. {
  33. p=(LinkList)malloc(sizeof(LNode));
  34. p->data=txt[i];
  35. q->next=p;
  36. q=p;
  37. }
  38. q->next=NULL;
  39. return L;
  40. }                        
  41. void on_clicked1(GtkWidget *widget,gpointer data)
  42. {
  43. LinkList L1,L2;
  44. LNode *p1,*p2;
  45. L1=CreateList(0);            将链表传给L1
  46. L2=CreateList(1);            将链表传给L2
  47. p1=L1;
  48. p2=L2;
  49. int i,j=0;
  50. char result[52];
  51. char letter;
  52. for(i=97;i<=122;i++)          并集合运算的算法
  53. {
  54.     letter=i;                     
  55.     while(p1)
  56.     {                    
  57.         if(p1->data==letter)
  58.         {
  59.             result[j]=letter;
  60.             j++;
  61.         }
  62.         else p1=p1->next;
  63.     }
  64.     while(p2)                 
  65.     {
  66.         if(j==0) j=j+1;
  67.         else
  68.         {
  69.         if(p2->data==letter&&result[j-1]!=letter) //70
  70.         {
  71.             result[j]=letter;
  72.             j++;
  73.         }   
  74.         else p2=p2->next;
  75.         }
  76.     }
  77. }
  78. gtk_label_set_text(GTK_LABEL(label),result);
  79. gtk_widget_show(label);
  80. }
  81. void on_clicked2(GtkWidget *widget,gpointer data)    //交运算,还没做
  82. {
  83. }
  84. void on_clicked3(GtkWidget *widget,gpointer data)    //差运算,还没做
  85. {
  86. }
  87. int main(int argc,char *argv[])              //main函数
  88. {
  89. gtk_init(&argc,&argv);
  90. window=gtk_window_new(GTK_WINDOW_TOPLEVEL);       //创建窗口
  91. gtk_window_set_title(GTK_WINDOW (window),"集合运算器");
  92. gtk_widget_set_usize(window,300,300);
  93. gtk_widget_show(window);
  94. table=gtk_table_new(4,2,FALSE);          //创建表格
  95. gtk_container_add(GTK_CONTAINER(window),table);
  96. gtk_widget_show(table);
  97. entry1=gtk_entry_new();                    //创建第一个文本框
  98. gtk_table_attach(GTK_TABLE (table),entry1,0,1,0,1,(GtkAttachOptions) (GTK_FILL),(GtkAttachOptions) (GTK_FILL),0,0);
  99. gtk_widget_show(entry1);
  100. entry2=gtk_entry_new();                     //创建第二个文本框
  101. gtk_table_attach(GTK_TABLE (table),entry2,1,2,0,1,(GtkAttachOptions) (GTK_FILL),(GtkAttachOptions) (GTK_FILL),0,0);
  102. gtk_widget_show(entry2);
  103. button1=gtk_button_new_with_label("并运算");           //并运算按钮
  104. gtk_table_attach(GTK_TABLE(table),button1,0,1,1,2,(GtkAttachOptions) (GTK_FILL),(GtkAttachOptions) (GTK_FILL),0,0);
  105. g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(on_clicked1),NULL);
  106. gtk_widget_show(button1);
  107. button2=gtk_button_new_with_label("交运算");               //交运算按钮
  108. gtk_table_attach(GTK_TABLE(table),button2,0,1,2,3,(GtkAttachOptions) (GTK_FILL),(GtkAttachOptions) (GTK_FILL),0,0);
  109. g_signal_connect(G_OBJECT(button2),"clicked",G_CALLBACK(on_clicked2),NULL);
  110. gtk_widget_show(button2);
  111. button3=gtk_button_new_with_label("差运算");                //差运算按钮
  112. gtk_table_attach(GTK_TABLE(table),button3,0,1,3,4,(GtkAttachOptions) (GTK_FILL),(GtkAttachOptions) (GTK_FILL),0,0);
  113. g_signal_connect(G_OBJECT(button3),"clicked",G_CALLBACK(on_clicked3),NULL);
  114. gtk_widget_show(button3);
  115. label=gtk_label_new("答案");                  //标签来显示答案
  116. gtk_table_attach(GTK_TABLE(table),label,1,2,2,3,(GtkAttachOptions) (GTK_FILL),(GtkAttachOptions) (GTK_FILL),0,0);
  117. gtk_widget_show(label);
  118. gtk_main();
  119. return 0;
  120. }

复制代码gcc collection.c -o collection `pkg-config --cflags --libs gtk+-2.0` //gcc编译
collection.c: 在函数‘CreateList’中:
collection.c:27: 警告: 隐式声明与内建函数‘strcpy’不兼容
collection.c:34: 警告: 比较指针和整数

运行
(collection:14233): Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()
然后出现乱码,请大牛看看哪里出错了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文