【发布时间】: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
但在ideone 中是:
输出:
15
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