C++: Перевести строку в нижний регистр.

В си есть функция для перевода в нижний регистр strlwr(), но можно написать и собственную реализацию:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include "locale.h"
#include "string.h"
 
void main()
{
    char string[255];
    setlocale(0,"Russian");
    printf("Введите слово:\n");
    gets(string);
    for(int i=0;i<strlen(string);i++)
    {
        if(string[i]>='A' && string[i]<='Z')
        {
            string[i]+=32;
        }
    }
    printf("%s \n",string);
}
#include "stdafx.h"
#include "locale.h"
#include "string.h"

void main()
{
    char string[255];
    setlocale(0,"Russian");
    printf("Введите слово:\n");
    gets(string);
    for(int i=0;i<strlen(string);i++)
    {
        if(string[i]>='A' && string[i]<='Z')
        {
            string[i]+=32;
        }
    }
    printf("%s \n",string);
}

2 Responses

  1. abcdw 17.12.2011 / 21:39

    крайне рекомендую придерживаться какого-либо стиля программирования (java/GNU/etc prgramming style).
    не смешивайте C и C++ это весьма разные языки.

    в этой программе допущена весьма значительная ошибка, превращающая асимптотику O(N) в O(N^2).
    функция length(s) находит длину строки примерно таким способом:

    1
    2
    3
    4
    
    while(s[count] != '\0')
    {
        ++count;
    }
    while(s[count] != '\0')
    {
        ++count;
    }

    очевидно считать в цикле каждый раз длину строки долго.

    решение:
    L = length(s);
    цикл до L;

    так же настоятельно рекомендую переходить на чистый С++.
    http://www.cplusplus.com/reference/string/string/ — плюсовые стринги имеют гораздо более удобный интерфейс.

    • Pyatnitsev 18.12.2011 / 02:36

      Можно и перейти. Согласен, что в C++ строки лучше. В чистом си нет понятия строки. Есть массив символов и всё…
      Но иногда приходится работать и с ним. Однако, и в нативном си можно что-то улучшить, например введя динамическую память.

      Про ошибку: в большом проекте — да. Но здесь это настолько не важно…
      Но да, вы правы.

Добавить комментарий