【问题标题】:why it has different behavior in different ide online or not为什么它在不同的ide在线有不同的行为
【发布时间】:2017-03-18 03:34:11
【问题描述】:

假设这段代码:

#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

in cpp.sh OutPut: 是 15


这种行为可能是什么?对不起,我的英语不好,希望你能明白我说的话吗?

【问题讨论】:

  • 您使用的几个字符没有以 ASCII 表示,因此 ASCII(或其他编码)的​​不同扩展可能会产生不同的结果。在 count++ 上放置一个断点,看看是什么触发了它。
  • 想一想,如果我将您的字符串转储为 UTF-8,然后以 ASCII 格式读回:“Hola, cómo estás”15 个字符,会发生什么情况。
  • @user4581301 这是有道理的。但是因为codechef不一样,难道是通过一些编译器配置?感谢您的宝贵时间
  • 我认为您需要string test = u8"Hola, cómo estás";,但不幸的是,我不知道如何将 UTF-8 字符串文字转换为 wstring 来进行比较而不转换为流并返回。
  • 我错了。更简单的方法。

标签: c++ ide online-compilation


【解决方案1】:

您似乎遇到了字符编码问题。在您的源代码中使用的几个字符不是 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 上有效?”

【讨论】:

  • 感谢您抽出宝贵时间,我支持并标记为已接受,如果有其他解决 CodeChef 谜团的问题,我将删除它。
  • 我在 codechef 中测试了你的代码,我得到了这个 -> error: converting to execution character set: Invalid or incomplete multibyte or wide character 也许知道原因会有所帮助。但是ideone没有错误。
  • @AngelAngel 我自己搞定了。他们正在用 UTF-8 做一些奇怪的事情。我不知道是什么,但我不认为这是犹太教。
猜你喜欢
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
相关资源
最近更新 更多