为什么它在不同的网络中有不同的行为

时间:2017-03-18 03:34:11

标签: c++ ide online-compilation

假设这段代码:

#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

<{1>} OutPut:中的

是15

这种行为可以是什么?我很抱歉我的英语不好我希望你能理解我说的话吗?

1 个答案:

答案 0 :(得分:1)

看起来你有一个字符编码问题。在您的源代码中,使用的几个字符不是ASCII的成员。这使您可以对扩展的ASCII进行不同的编码和不同的解释。

例如,将源保存为UTF-8,然后使用仅读取原始ASCII的编辑器打开,字符串出现

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

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

这使得test中的15个字符也位于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

现在我们留下了问题,&#34;为什么这对CodeChef有效?&#34;