Re: Strings, Arrays, c++ and java
On Tue, 25 Mar 2008 18:10:32 -0700 (PDT), zionz <zionztp@gmail.com>
wrote:
Could you verify this one:
I would but I already posted the sorce so you can also verify it
yourself
=== C++===
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
const int len = 50000000;
void getRandomString( std::string& s, size_t len);
void randomString( std::string& s);
int main( int argc, char *argv[])
{
if (argc < 2) { cout << "Fool enter text to search"; exit(0);}
string s;
string toSearch = argv[1];
clock_t start=clock();
randomString (s);
//getRandomString(s, len); version by Ian
clock_t endt=clock();
int found = s.find (toSearch);
int count = 0;
while (found!=string::npos)
{
count++;
found=s.find(toSearch,found+1);
}
std::cout <<"Number of " << toSearch << ": " << count << "\n";
std::cout <<"Time: " <<
double(endt-start)/CLOCKS_PER_SEC * 1000 << " ms\n";
}
/*
//my version
void getRandomString( std::string& s, size_t len )
{
srand((unsigned)std::time(0));
std::string cr( len, '\0' );
for( int i = 0 ; i < len ; ++i )
{
int iNumber;
iNumber = rand() % 26 + 97;
cr[i] = (char) iNumber;
}
s.swap( cr );
}
*/
//version by zionz
void randomString(std::string &s)
{
char cr[len];
int n;
unsigned char tn[4];
srand((unsigned)std::time(0));
for( int i = 0 ; i < len; i+=4 ){
n = rand();
memcpy(tn, &n, 4);
s+= (char) (tn[0] % 26 + 97);
s+= (char) (tn[1] % 26 + 97);
s+= (char) (tn[2] % 26 + 97);
s+= (char) (tn[3] % 26 + 97);
}
}
//version by Ian Collins
void getRandomString( std::string& s, size_t len )
{
srand(std::time(0));
std::string cr( len, '\0' );
// The following code is based on the requirement that RAND_MAX
// shall be at least 32767.
//
const size_t byThree = (len/3)*3;
size_t i(0);
while( i < byThree )
{
const int iNumber( rand() );
cr[i++] = iNumber % 26 + 97;
cr[i++] = (iNumber>>5) % 26 + 97;
cr[i++] = (iNumber>>10) % 26 + 97;
}
while( i < len )
{
const int iNumber( rand() );
cr[i++] = iNumber % 26 + 97;
}
s.swap( cr );
}
===Java===
import java.util.*;
public class Find{
public static void main(String[] arg)
{
if (arg.length == 0)
{
System.out.println("Fool! Enter text on command line to search");
System.exit(-1);
}
final int len = 50000000;
String toSearch = arg[0];
//create a string with 50 million chars from a-z
long start = System.currentTimeMillis();
String s = randomString(len);
long end = System.currentTimeMillis();
int count = 0;
int index = s.indexOf(toSearch);
while (index != -1)
{
index++;
count++;
index = s.indexOf(toSearch, index);
}
System.out.println("Number of " + toSearch + ": " + count);
System.out.println("Time: " + (end - start) + " ms");
}
//returns a String of length l with lowercase letters from a to z
static String randomString(int len)
{
char[] cr = new char[len];
Random rd = new Random();
for (int i = 0; i < len; i++){
int num = rd.nextInt(26) + 97;
cr [i] = (char) num;
}
return new String(cr);
}
}