Как преобразовать std :: string в нижний регистр? - PullRequest
686 голосов
/ 24 ноября 2008

Я хочу преобразовать std::string в нижний регистр. Мне известна функция tolower(), однако в прошлом у меня были проблемы с этой функцией, и в любом случае она вряд ли идеальна, поскольку использование std::string потребовало бы итерации по каждому символу.

Есть ли альтернатива, которая работает 100% времени?

Ответы [ 25 ]

0 голосов
/ 08 мая 2017

Используйте fplus :: to_lower_case ().

(fplus: https://github.com/Dobiasd/FunctionalPlus.

Поиск 'to_lower_case' в http://www.editgym.com/fplus-api-search/)

fplus::to_lower_case(std::string("ABC")) == std::string("abc");
0 голосов
/ 10 апреля 2017

Фрагмент кода

#include<bits/stdc++.h>
using namespace std;


int main ()
{
    ios::sync_with_stdio(false);

    string str="String Convert\n";

    for(int i=0; i<str.size(); i++)
    {
      str[i] = tolower(str[i]);
    }
    cout<<str<<endl;

    return 0;
}
0 голосов
/ 19 апреля 2013
//You can really just write one on the fly whenever you need one.
#include <string>
void _lower_case(std::string& s){
for(unsigned short l = s.size();l;s[--l]|=(1<<5));
}
//Here is an example.
//http://ideone.com/mw2eDK
0 голосов
/ 29 августа 2014

На платформах Microsoft вы можете использовать семейство функций strlwr: http://msdn.microsoft.com/en-us/library/hkxwh33z.aspx

// crt_strlwr.c
// compile with: /W3
// This program uses _strlwr and _strupr to create
// uppercase and lowercase copies of a mixed-case string.
#include <string.h>
#include <stdio.h>

int main( void )
{
   char string[100] = "The String to End All Strings!";
   char * copy1 = _strdup( string ); // make two copies
   char * copy2 = _strdup( string );

   _strlwr( copy1 ); // C4996
   _strupr( copy2 ); // C4996

   printf( "Mixed: %s\n", string );
   printf( "Lower: %s\n", copy1 );
   printf( "Upper: %s\n", copy2 );

   free( copy1 );
   free( copy2 );
}
0 голосов
/ 10 июля 2014

Я попробовал std :: transform, все, что я получаю, это отвратительная ошибка компиляции stl, которую могут понять только друиды 200 лет назад (не может конвертировать в flibidi flabidi грипп)

это прекрасно работает и может быть легко настроено

string LowerCase(string s)
{
    int dif='a'-'A';
    for(int i=0;i<s.length();i++)
    {
        if((s[i]>='A')&&(s[i]<='Z'))
            s[i]+=dif;
    }
   return s;
}

string UpperCase(string s)
{
   int dif='a'-'A';
    for(int i=0;i<s.length();i++)
    {
        if((s[i]>='a')&&(s[i]<='z'))
            s[i]-=dif;
    }
   return s;
}
...