Професионална програма
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