Loading...
itonev avatar itonev 22 Точки

Код по първа задача

Здравейте,

Кодът ми работи за текстове на латиница.

Например за ATb3  ще покаже две главни букви една малка и един друг символ. Тоест тройката

При кирилица не отчита малки главни, всичко го брои като други символи

При вас как е кирилицата ?

#include <iostream>
#include <map>
#include <string>
#include <ctype.h>

int main()
{
    std::string UserInput = "";

    std::cout << "Please, input string >>";
    std::getline(std::cin,UserInput);
    std::cout << "You Enter:" << UserInput;

    std::map<std::string,unsigned int> Counters;

    Counters["upper"] = 0;
    Counters["lower"] = 0;
    Counters["other"] = 0;

    unsigned int len = UserInput.length();

    for(unsigned int i=0;i<len;i++)
    {
      if ( islower(UserInput[i]) )
      {
         Counters["lower"]++;
      }
      else if ( isupper(UserInput[i]) )
      {
         Counters["upper"]++;
      }
      else
      {
          Counters["other"]++;
      }
    }

    std::cout << std::endl << "Uppers: " << Counters["upper"] << std::endl;
    std::cout << std::endl << "Lowers: " << Counters["lower"] << std::endl;
    std::cout << std::endl << "Other:" << Counters["other"] << std::endl;

    return 0;

}


 

1
C++ Programming
Lirik avatar Lirik 22 Точки

Така ремонтиран кодът правилно брои кирилица под Win 10x64, GNU GCC 4.9.2 64 bit Release, ISO C++11

 

#include <iostream>
#include <map>
#include <string>
#include <ctype.h>
#include <locale>
#include <windows.h>
using namespace std;
string fromDos (string dosString)
{
    char buf[1000000] ;
    OemToCharA(dosString.c_str(), buf) ; // windows.h
    return buf ;
}

int main()
{
    setlocale (LC_ALL, "bulgarian") ;
    std::string UserInput = "";

    std::cout << "Please, input string >>";
    std::getline(std::cin,UserInput);
    UserInput = fromDos(UserInput) ;
    std::cout << "You Enter:" << UserInput;

    std::map<std::string,unsigned int> Counters;

    Counters["upper"] = 0;
    Counters["lower"] = 0;
    Counters["other"] = 0;

    unsigned int len = UserInput.length();

    for(unsigned int i=0;i<len;i++)
    {
      if ( islower(UserInput[i]) )
      {
         Counters["lower"]++;
      }
      else if ( isupper(UserInput[i]) )
      {
         Counters["upper"]++;
      }
      else
      {
          Counters["other"]++;
      }
    }

    std::cout << std::endl << "Uppers: " << Counters["upper"] << std::endl;
    std::cout << std::endl << "Lowers: " << Counters["lower"] << std::endl;
    std::cout << std::endl << "Other:" << Counters["other"] << std::endl;

    return 0;

}
 

0
itonev avatar itonev 22 Точки

Неочаквано ми се скапа виртуалката.

Ще тествам след преинсталация.

0
itonev avatar itonev 22 Точки

Изход програма:

cprog@CPROG-PC C:\Users\cprog\.CLion2016.1\system\cmake\generated\CountCharsCyr-
754308f3\754308f3\Debug                                                         
> CountCharsCyr.exe                                                             
Please, input string >>Тонев                                                    
You Enter:?????                                                                 
Uppers: 0                                                                       
                                                                                
Lowers: 0                                                                       
                                                                                
Other:5                                                                         
                                                                                

Версия компилатор:

> gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=C:/TDM-GCC-64/bin/../libexec/gcc/x86_64-w64-mingw32/5.1.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-5.1.0/configure --build=x86_64-w64-mingw32 --enable-targets=all --enable-languages=ada,c,c++,fortran,lto,objc,obj-c++ --enable-libgomp --enable-lto --enable-graphite --enable-cxx-flags=-DWINPTHREAD_STATIC --disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-libstdcxx-debug --enable-threads=posix --enable-version-specific-runtime-libs --enable-fully-dynamic-string --enable-libstdcxx-threads --enable-libstdcxx-time --with-gnu-ld --disable-werror --disable-nls --disable-win32-registry --prefix=/mingw64tdm --with-local-prefix=/mingw64tdm --with-pkgversion=tdm64-1 --with-bugurl=http://tdm-gcc.tdragon.net/bugs
Thread model: posix
gcc version 5.1.0 (tdm64-1)

На windows 7 64 бита

Просто функциите  islower  isupper  не работят с кирлица

Те трябва да се променят или да са други, че дастане

0
Lirik avatar Lirik 22 Точки

Win10x64, TDM-GCC-4.9.2 64 bit Release ISO C++11

 

1
itonev avatar itonev 22 Точки

При такова доказателство остава да кажа, че явно, аз не изпълнявам примера по някаква причина коректно и нещо друго в средата влияе при мен.

И че примерът си работи :)

0
Lirik avatar Lirik 22 Точки

Това само показва, че функциите isupper и islower работят все пак и и с кирилица. А задачата от домашното си е правилно решена. Просто има някакъв проблем с environment-a.

0
itonev avatar itonev 22 Точки

В крайна сметка под  Windows за non-Unicode  programs  си избрах  Bulgarian locale  и всичко заспа.

0
Lirik avatar Lirik 22 Точки

Да настройката ми за non-Unicode си е същата.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.