почему он имеет другое поведение в Интернете или нет

Предполагая этот код:

#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;
}

почему это имеет другое поведение в codechef:

Выход:

13

https://www.codechef.com/ide

Но в ideone является:

Выход:

15

https://ideone.com/jzbxA1

в cpp.sh Выход: 15


К чему может быть это поведение? Извините за мой плохой английский. Надеюсь, вы понимаете, что я говорю?

0

Решение

Похоже, у вас есть проблема с кодировкой символов. В вашем исходном коде несколько используемых символов не являются членами ASCII. Это оставит вас открытыми для разных кодировок и разных интерпретаций расширенных ASCII.

Например, сохраняя исходный код как UTF-8, а затем открывая его в редакторе, который читает только необработанный ASCII, получаются строки

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

а также

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

Это помещает 15 символов в test которые также находятся в abc потому что некоторые символы занимали более одного байта. С помощью std::wstring вместо std::string должно помочь с этим, но вам также нужно использовать строковые литералы widechar

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

а также

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

и конечно

int letters_counted_in_text(std::wstring const&text)

потому что нам нужно пройти wstring в функции.

Вот это на ideone: http://ideone.com/fAVPKt

Теперь у нас остался вопрос: «Почему это работает на CodeChef?»

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]