Question

I'm sort of creating typing tutor with custom options.

Not a professional (don't get mad at me for being wrong-person-wrong place) but thanks to helpful forums like stackoverflow.com and contributing traffic/people I'm able to pull it out in a day or two.

Directly now, here!

    while (i < len+1){
      if(boxarray[i] == orgarray[i]){
    ++i;
        actualScore = i - 1;
      }

I've searched already, '==' operator is of no use, I will not go for JSON.encode. I met similar solution at this page . But in my case I've to loop through each word while comparing two sentences. Detail is trivial, if someone please help me solve above, I won't return with complain on the same project, promise.

Okay I'm putting more code if it can help you help me.

    var paratext = document.getElementById('typethis').innerHTML;    
    var orgstr = "start typing, in : BtXr the yellow box but. please don't shit." ;
    var boxtext = document.getElementById('usit').value; 
    var endtrim = boxtext;
    var actualScore;
    var orgarray = listToArray(orgstr," ");
    var boxarray = listToArray(boxtext," ");
    var len = boxarray.length;
    var i = 0;
    var actualScore; //note var undefined that's one mistake I was making [edit]
    if(orgstr.indexOf(boxtext) !== -1){
    while (i < len+1){
      if(boxarray[i] == orgarray[i]){
    ++i;
        actualScore = i - 1;
       }
     }      
    alert(actualScore);
    }
Était-ce utile?

La solution

If I follow what you're after how about something like this:

http://jsfiddle.net/w6R9U/

var s1 = 'The dog sleeps';
var s2 = 'the dog jogs';

var s1Parts= s1.split(' ');
var s2Parts= s2.split(' ');

var score = 0;

for(var i = 0; i<s1Parts.length; i++)
{
     if(s1Parts[i] === s2Parts[i])
         score++;   
}

"The dog sleeps" and "the dog sleeps" results in a score of 2 because of case (which could be ignored, if needed). The example above results in a score of 1. Could get a percent by using the length of the sentences. Hope this helps! If nothing else might get you started.

Autres conseils

The following will compare each individual character, decreasing the "actualScore" for each inequality:

http://jsfiddle.net/ckKDR/

var sentence1 = "This is the original sentence.", // original text
    sentence2 = "This is teh originel sentence.", // what the user typed
    length = sentence1.length,
    actualScore = length, // start with full points
    i = 0;

while(i<length){
    if(sentence1[i]!==sentence2[i]){
        actualScore--; // subtract 1 from actual score
    }

    i++; // move to the next index
}

alert("'sentence2' is "+Math.round(100*(actualScore/length))+"% accurate");

Let's say the input is your two sentences as strings.

Then the first thing to do is to create two temporary strings, with all the non-word characters eliminated (e.g. punctuation characters). Split the sentences into string arrays by word delimiters.

Then you can assign an integer variable to score. Create an outer loop and an inner loop for the two sentences. When the words match in the sentences, increment the variable by 1, remove the word from the 2nd sentence (replace the word with a non-word character) and break out of the inner loop.

Also, use this operator for word comparison instead:

===

Your problem is

if (boxarray[i] = orgarray[i])

The single = is the assignment operator. Replace it with

===

to be a comparison.

You are not comparing you are assigning

if(boxarray[i] = orgarray[i]){ 
              ^^^

So it will be true on each iteration. Fix the typo to actually perform the check you want

if(boxarray[i] === orgarray[i]){ 
               ^^^

And how you are calculating the score looks to be wrong. You should be doing something like

var score = orgstr.length;
while...
    if(boxarray[i] === orgarray[i]){ 
        score--;
    }
{
string1="string1";
string2="string2 is here";
  changepercent(string1,string2);
}

function changepercent(string1,string2) {

  var s1Parts= string1.split(' ');
  var s2Parts= string2.split(' ');

  var matched = 0;

for(var i = 0; i<s1Parts.length; i++)
{
  for(var j = 0; j<s2Parts.length; j++)
      {
        if(s1Parts[i] === s2Parts[j])
         matched++;   
      }

}
  var percentage=(matched/Math.max(s1Parts.length, s2Parts.length))*100;

  console.log(matched);
  console.log(percentage);
if(percentage<50)
{
  console.log("Change Above 50%");
}

}

Slightly modified first code

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top