我正在寻找一种方法来计算西班牙语单词、短语或文本的字符。
例如:
cout << "Cantidad de letras: " << letters_counted( "¿Hola, cómo estás?" ) << endl;
结果应该是:
Cantidad de letras: 13
我没有找到将字母与重音进行比较的方法,有没有办法?
这是一次失败的尝试:
int count=0; txt="Hola, cómo estás";
regex rx( "[a-zA-ZñÑáéíóúÁÉÍÓÚ]" );
for( sregex_iterator it( txt.cbegin(), txt.cend(), rx ); it!=sregex_iterator();
++it ) count++;
cout << count << endl;
它不显示字母数 13,而是返回 15。
我不明白如何处理扩展字符,例如带重音的元音á、é、í、ó、ú和ñ。
这是另一个尝试,算法类似于@AngelAngel。
int letters_counted_in_text( std::string const&text ) {
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;
}
但是当它应该是 13 时它也会返回 15 个字母,比如“你好,你好吗”。
是否有可能使用 u16string 或 wstring?处理西班牙字母表中的字母。
我已经看到我修改了您的问题,我将删除我以前的答案,我将澄清为什么这些代码有效
好吧,肯定是匆忙的混乱。
从你的问题:
testideone
变化:
string
通过wstring
并添加L
:wstring txt = L"Hola, cómo estás";
regex
通过wregex
并添加L
:wregex rx( L"[a-zA-ZñÑáéíóúÁÉÍÓÚ]" );
sregex_iterator
经过wsregex_iterator
for( wsregex_iterator...
sregex_iterator();
经过wsregex_iterator();
it!=wsregex_iterator();
从你的问题:
变化:
std::string const&text
经过std::wstring const&text
.
string
通过wstring
并添加L
:.
我认为这段代码或多或少是您正在寻找的,如果它们在字典中,它会计算字符:
我把这些代码留给你是因为我不太清楚你在问什么,(肯定是我看的时候,我很难理解你想要什么)
使用此代码,您可以计算一个字符在字典中出现的次数。
使用此代码,您可以计算不同字符的数量,只要它们在字典中即可。
上述代码很可能可以优化,但我认为这将使您更好地了解它们的作用。
如果要计算字符,可以尝试类似的方法:
内部负责计算字符串中有多少个空格,然后从字符串的长度中减去它们
if
。for
http://www.cplusplus.com/reference/string/string/erase/ http://www.cplusplus.com/reference/string/string/at/