Angel Angel
Angel Angel

Reputation: 21728

why it has different behavior in different ide online or not

Assuming this code:

#include <iostream>
using namespace std;

int letters_counted_in_text( std::string const&text ) {
  int count = 0;
  string abc = "abcdefghijklmnñopqrstuvwxyzáéíóúABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚ";

  for( unsigned i=0; i<text.length(); ++i )
    for( unsigned j=0; j<abc.length(); ++j )
      if( text.at( i )==abc.at( j ) )
      {
        count++;
        j=abc.length();
      }
  return count;
}

int main() {
    // your code goes here
    string test = "Hola, cómo estás";
    cout << letters_counted_in_text(test);

    return 0;
}

why it has different behavior in codechef:

OutPut:

13

https://www.codechef.com/ide

But in ideone is:

OutPut:

15

https://ideone.com/jzbxA1

in cpp.sh OutPut: is 15


To what can this behavior be? I'm sorry for my bad english I hope you can understand what I say?

Upvotes: 0

Views: 56

Answers (1)

user4581301
user4581301

Reputation: 33952

It looks like you have a character encoding problem. In your source code several characters used are not members of ASCII. This leave you open to different encodings and different interpretations of extended ASCII.

For example, saving your source as UTF-8 and then opening with an editor that only reads raw ASCII, the strings come out

string abc = "abcdefghijklmnñopqrstuvwxyzáéíóúABCDEFGHIJKLMNÑOPQRSTUVWXYZÃÉÃÓÚ";

and

string test = "Hola, cómo estás";

That puts 15 characters in test that are also in abc because some of the characters took up more than one byte. Using std::wstring instead of std::string should help with this, but you also need to use widechar string literals

wstring abc = L"abcdefghijklmnñopqrstuvwxyzáéíóúABCDEFGHIJKLMNÑOPQRSTUVWXYZÁÉÍÓÚ";

and

wstring test = L"Hola, cómo estás";

and of course

int letters_counted_in_text(std::wstring const&text)

because we need to pass wstring in to the function.

Here it is on ideone: http://ideone.com/fAVPKt

Now we're left with the question, "Why did this work on CodeChef?"

Upvotes: 1

Related Questions