假设这段代码:
#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
<{1>} OutPut:中的是15
这种行为可以是什么?我很抱歉我的英语不好我希望你能理解我说的话吗?
答案 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;