Advertisement
Guest User

Untitled

a guest
Sep 29th, 2012
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.23 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <vector>
  4. #include <string>
  5. #define NOMINMAX
  6. #include <windows.h>
  7. #include <iostream>
  8.  
  9. const int count = 250*1000;
  10. const int max_length = 250;
  11.  
  12. std::vector<std::string> strings1 = std::vector<std::string>(count);
  13. std::vector<std::string> strings2 = std::vector<std::string>(count);
  14. std::string allowed_chars = std::string("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
  15.  
  16. double elapsed_ms(LARGE_INTEGER start, LARGE_INTEGER end) {
  17.     LARGE_INTEGER frequency;
  18.     QueryPerformanceFrequency(&frequency);
  19.     return (end.QuadPart - start.QuadPart) * 1000 / (double) frequency.QuadPart;
  20. }
  21.  
  22. int test(char* a, char* b) {
  23.     return *a != *b;
  24. }
  25.  
  26. void compare_cstrings(int count, int length) {
  27.     std::vector<char*> shortstrings1 = std::vector<char*>(count);
  28.     std::vector<char*> shortstrings2 = std::vector<char*>(count);
  29.  
  30.     LARGE_INTEGER start, end;
  31.  
  32.     for (int str_id = 0; str_id < count; str_id++) {
  33.         shortstrings1[str_id] = new char[length + 1];
  34.         shortstrings2[str_id] = new char[length + 1];
  35.         strings1[str_id].copy(shortstrings1[str_id], length, 0);
  36.         strings2[str_id].copy(shortstrings2[str_id], length, 0);
  37.         shortstrings1[str_id][length] = shortstrings2[str_id][length] = '\0';
  38.     }
  39.  
  40.     int matches = 0;
  41.  
  42.     QueryPerformanceCounter(&start);
  43.     for (int str_id = 0; str_id < count; str_id++)
  44.         if (test(shortstrings1[str_id], shortstrings2[str_id]) == 0)
  45.             matches++;
  46.     QueryPerformanceCounter(&end);
  47.  
  48.     for (int str_id = 0; str_id < count; str_id++) {
  49.         delete[] shortstrings1[str_id];
  50.         delete[] shortstrings2[str_id];
  51.     }
  52.  
  53.     printf("C-Strings\t%d\t%d\t%f\tms\t(%d matches)\n", count, length, elapsed_ms(start, end), matches);
  54. }
  55.  
  56. int main(int argc, char** argv) {
  57.     srand(0);
  58.  
  59.     for (int str_id = 0; str_id < count; str_id++) {
  60.         std::string str1 = std::string(max_length, ' ');
  61.         std::string str2 = std::string(max_length, ' ');
  62.  
  63.         for (int char_id = 0; char_id < max_length; char_id++) {
  64.             str1[char_id] = allowed_chars[std::rand() % allowed_chars.length()];
  65.             str2[char_id] = allowed_chars[std::rand() % allowed_chars.length()];
  66.         }
  67.  
  68.         strings1[str_id] = str1;
  69.         strings2[str_id] = str2;
  70.     }
  71.    
  72.     for (int length = 1; length <= 250; length++)
  73.         compare_cstrings(count, length);
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement