Advertisement
Guest User

Untitled

a guest
Dec 7th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.08 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdbool.h>
  5. #include <ctype.h>
  6.  
  7. #define N 100
  8. #define M 100
  9.  
  10. char *scan_sentences(){
  11. char *s = malloc(N*sizeof(char));
  12. int counter = 0;
  13. int size = N;
  14. char current_symbol;
  15. current_symbol = getchar();
  16. while ((current_symbol == ' ') || (current_symbol == '\t')){
  17. current_symbol = getchar();
  18. }
  19. while ((current_symbol!= '\n') && (current_symbol != '.') && (current_symbol != '!')){
  20. if(counter>=size - 5){
  21. size+=N;
  22. s = realloc(s, size);
  23. }
  24. s[counter] = current_symbol;
  25. counter++;
  26. current_symbol = getchar();
  27.  
  28. }
  29. s[counter++] = current_symbol;
  30. s[counter++] = '\n';
  31. s[counter] = '\0';
  32. return s;
  33. }
  34.  
  35. bool stcp(char* a, char* b){
  36. int lena = strlen(a);
  37. int lenb = strlen(b);
  38. char* newa = calloc(lena+1, sizeof(char));
  39. char* newb = calloc(lenb+1, sizeof(char));
  40. for(int i = 0; i<lena; i++){
  41. newa[i]=toupper(a[i]);
  42. if(i==lena-1){
  43. i++;
  44. newa[i]='\0';
  45. }
  46. }
  47. for(int i = 0; i<lenb; i++){
  48. newb[i]=toupper(b[i]);
  49. if(i==lenb-1){
  50. i++;
  51. newb[i]='\0';
  52. }
  53. }
  54. int st = strcmp(newa,newb);
  55. free(newa);
  56. free(newb);
  57. return(st==0) ? true : false;
  58.  
  59. }
  60.  
  61.  
  62. char** find_simmilar_and_kill(char** pointers,int* pointonsizeofmassive){
  63. const unsigned int sizeofmassive = *(pointonsizeofmassive);
  64. bool *proverka = malloc(sizeofmassive*sizeof(bool));
  65. for(int i = 0; i<sizeofmassive; i++){
  66. proverka[i] = true;
  67. }
  68. for(int i = 0; i<(sizeofmassive-1); i++){
  69. for(int j=i+1; j<sizeofmassive; j++){
  70. if(stcp(pointers[i],pointers[j])){
  71. proverka[i]=false;
  72. proverka[j]=false;
  73. }
  74. }
  75. }
  76. int suits = 0;
  77. for(int i = 0; i<sizeofmassive; i++){
  78. if(proverka[i]!=false){
  79. suits++;
  80. }
  81. }
  82. char** newpointers = malloc(suits*sizeof(char));
  83. int j = 0;
  84. for(int i=0; i<sizeofmassive; i++){
  85. if(proverka[i]){
  86. newpointers[j++]=pointers[i];
  87. }
  88. else{
  89. free(pointers[i]);
  90. }
  91. free(pointers);
  92. free(proverka);
  93. return newpointers;
  94. }
  95. }
  96.  
  97.  
  98. int main(){
  99. char **pointers = malloc(M*sizeof(char*));
  100. int counter = 0;
  101. int size = M;
  102. char *s;
  103. int sizeofmymassive = 0;
  104. do {
  105. s = scan_sentences();
  106. if (counter == size - 1) {
  107. size += M;
  108. pointers = realloc(pointers, size * sizeof(char *));
  109. }
  110. pointers[counter] = s;
  111. counter++;
  112. sizeofmymassive++;
  113. }while(strcmp(s,"\n\n")!=0);
  114. int* pointonsizeofmassive = &sizeofmymassive;
  115. pointers = find_simmilar_and_kill(pointers, pointonsizeofmassive);
  116.  
  117. for (int i = 0; i < suits; i++) {
  118. fputs(pointers[i], stdout);
  119. }
  120. for(int i = 0; i<counter;i++){
  121. free(pointers[i]);
  122. }
  123. free(pointers);
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement