1. Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.
    Сокриј

[C++] Прашање

Дискусија во форумот 'C // C++' започната од NT.NT., 10 Март 2019.

Тагови:
  1. NT.NT.

    NT.NT.
    Гостин

    Доколку имам задача каде треба да направам програма во која корисникот внесува збор на пример: 8S2K4L, како би можела да го напишам целиот израз, на пример: SSSSSSSSKKLLLL? Бројот пред буквата означува колку пати треба да ја има таа буква во зборот од излезот.
    Пример:
    влез
    8S4Q7R
    излез
    SSSSSSSSQQQQRRRRRRR
    Доколку може на што поедноставен начин некој да ми ја објасни.
    Еве единствен начин како би започнала:

    #include <iostream>
    using namespace std;
    int main() {
    int N;
    cin >> N;
    char zbor[N];

    for (int i = 0; i < N; i++) {
    cin >> zbor;
    }
    //...
    return 0;
    }

    Проблемот е што корисникот не треба да внесува должина на збор.
     
  2. Pulse

    Pulse
    Practice makes perfect

    1,231
    1,244
    26 oктомври 2014
    Машко
    Full Stack Web Developer
    Незнам во ц++, ама еве ти ја решив во јаваскрипт.
    Горе долу алгоритмот го имаш, само синтаксата е различна.
    бтњ претпоставив дека бројот пред буквата може да биде во рејнџ од 0 до 999.
    Код:
    https://jsfiddle.net/6h1dj82y/
     
    Последна промена: 10 Март 2019
    На Banjifiko му/ѝ се допаѓа ова.
  3. OldSchoolPvP

    OldSchoolPvP
    Practice makes perfect

    743
    1,173
    13 Февруари 2014
    Машко
    Задачата ти вика дека не треба да се внесува должина на зборот а ти веке почнуваш да ја решаваш со тоа што внесуваш должина.
    Пробај со стрингови.

    Код:
    main() {
    
      char str[] = "hello";   // Овде место hello stavi input string
      int strLength = strlen(str);  // Ја наогаш должината на стрингот
      int temp;
    
      for (int i = 0; i < strLength; i++)
    {
          if ( str == 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || 0 )
              temp = str [i];  // Ако е бројка памти која бројка е да знае да принта толку пати наредната буква
          else
              {
                     ciklus da ja printa bukvata koj ide do temp
               }
      }
    
    Oва е грубо скоро решена види може да се оптимизира и поелегантно.
    
      return 0;
    }
     
  4. NT.NT.

    NT.NT.
    Гостин

    Компајлерот ми јавува грешка кај споредбата (дисјункцијата) - 'C++ forbids comparison between an integer and a pointer' 14-та линија.
    Код:
    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    int main()
    {
    
          char str[999];   // Овде место hello stavi input string
          int strLength = strlen(str);  // Ја наогаш должината на стрингот
          char temp;
    
          for (int i = 0; i < strLength; i++) {
                if (str == '1' || str == '2' || str == '3' || str == '4' || str == '5' || str == '6' || str == '7' || str == '8' || str == '9' || str == '0' ) {
                    temp = str[i];  // Ако е бројка памти која бројка е да знае да принта толку пати наредната буква
                } else {
                    for (int j = 0; j < temp; j++) {
                        cout << str[i];
                    }
                }
          }
    
        return 0;
    }
    

    Edit: Некако успеав да ја поправам, ама не работи - програмчево не ми дава output.

    Код:
    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    int main()
    {
    
          char str[999];   // Овде место hello stavi input string
          int strLength = strlen(str);  // Ја наогаш должината на стрингот
          char temp;
    
          for (int i = 0; i < strLength; i++) {
                cin >> str[i];
          }
    
          for (int i = 0; i < strLength; i++) {
                if (str == "1" || str == "2" || str == "3" || str == "4" || str == "5" || str == "6" || str == "7" || str == "8" || str == "9" || str == "0" ) {
                    temp = str[i];  // Ако е бројка памти која бројка е да знае да принта толку пати наредната буква
                } else {
                    for (int j = 0; j < temp; j++) {
                        cout << str[i];
                    }
                }
          }
    
        return 0;
    }
    
     
    Изменето од модератор: 10 Март 2019
  5. OldSchoolPvP

    OldSchoolPvP
    Practice makes perfect

    743
    1,173
    13 Февруари 2014
    Машко
    Кај споредбата треба да стои str [ i ] бидејки споредуваш само 1 карактер од низата .
    А strlen ти е функција која врака должината на стрингот и се наога во string.h heder.
     
  6. NT.NT.

    NT.NT.
    Гостин

    Го изменив коментарот и програмата, но сѐ уште програмчето не работи.
    Код:
    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    int main()
    {
    
          char str[999];   // Овде место hello stavi input string
          int strLength = strlen(str);  // Ја наогаш должината на стрингот
          char temp;
    
          for (int i = 0; i < strLength; i++) {
                cin >> str[i];
          }
    
          for (int i = 0; i < strLength; i++) {
                if (str[i] == '1' || str[i] == '2' || str[i] == '3' || str[i] == '4' || str[i] == '5' || str[i] == '6' || str[i] == '7' || str[i] == '8' || str[i] == '9' || str[i] == '0' ) {
                    temp = str[i];  // Ако е бројка памти која бројка е да знае да принта толку пати наредната буква
                } else {
                    for (int j = 0; j < temp; j++) {
                        cout << str[i];
                    }
                }
          }
    
        return 0;
    }
    
    
    Можеби имам грешка кај char str[]; или нешто.
     
    Изменето од модератор: 10 Март 2019
  7. 100JKO

    100JKO
    Gaining Experience

    28
    86
    27 Јуни 2018
    Машко
    Intern
    Najednostavno spored mene.
    Код:
    #include <iostream>
    using namespace std;
    
    int main() {
        char bukv;
        int n, br, a;
        cout << "Vnesi broj na bukvi: ";
        cin >> n;
    
        for(int i = 0; i < n; i++) {
            a = 1;
            cin >> br >> bukv;
            while(a <= br) {
                cout << bukv;
                a++;
            }
        }
        return 0;
    }
    
     
    На Banjifiko му/ѝ се допаѓа ова.
  8. NT.NT.

    NT.NT.
    Гостин

    Сѐ тоа е во ред, но поентата е што според задачата не треба корисникот да внесува број на букви, јас треба да направам програма која сама ќе го одреди тоа.
     
  9. 100JKO

    100JKO
    Gaining Experience

    28
    86
    27 Јуни 2018
    Машко
    Intern
    Треба со Ентер да прекине програмата или?
     
  10. JensenInterceptor

    JensenInterceptor
    Gaining Experience

    511
    203
    28 ноември 2015
    Машко
    Хмм, ако си сто посто сигурна дека секогаш во низата од знаци, секој непарен знак е бројка, а секој парен е буква, тогаш расцепи ја низата од знаци и анализирај го секој знак од прв до последен посебно.

    Значи секогаш ќе имаш парен број на букви во „зборот“.

    Не знам со Ц++ како се прави ама во Це Шарп има функција што се вика Split(char)

    Код:
    string moiZnaci = "8S2K4L";
    string[] nizaZnaci = moiZnaci.Split('');// prazen karakter
    string ishod = "";
    
    for(int i = 0; i < nizaZnaci.Length; i += 1)
    {
        int brojZnaci = 0;
    
        if(i % 2 != 0)
        {
            brojZnaci = Convert.ToInt32(nizaZnaci[i]);
        }
        else
        {
            for(int j = 0; j < brojZnaci; j += 1)
            {
                ishod += nizaZnaci[i];
            }
        }
     
    }
    
    Console.WriteLine(ishod);
    
    
    Нешто вака да пробаш?

    Тоа temp ти е од вид, char, j треба да иде од 0 до некој цел број. Претвори го temp во цел број за да работи.
     
    Изменето од модератор: 10 Март 2019
  11. Bontino2

    Bontino2
    Intern

    170
    16
    21 ноември 2012
    Машко
    Еве решение во ц++

    Код:
    #include <iostream>
    #include <algorithm> 
    #include <string> 
    #include <vector> 
    
    using namespace std;
    
    vector<char>znaci;
    vector<int> faktorKratnost;
    vector<char>bukvi;
    
    void function()
    {
        for (int i = 0; i < znaci.size(); i++)
        {
            if (znaci[i] >= '2' && znaci[i] <= '9')
                faktorKratnost.push_back(int(znaci[i] - 48));
            else if (znaci[i] >= 'A' && znaci[i] <= 'Z')
            {
                bukvi.push_back(znaci[i]);
                if (i - 1 < 0 || (znaci[i - 1] >= 'A' && znaci[i - 1] <= 'Z'))
                {
                    faktorKratnost.push_back(1);
                }
            }
        }
    }
    
    string result()
    {
        string s;
        for (int i = 0; i < bukvi.size(); i++)
            for (int j = 0; j < faktorKratnost[i]; j++)
                s.push_back(bukvi[i]);
    
        return s;
    
    }
    
    int main()
    {
        string zbor;
        cin >> zbor;
        for (int i = 0; i < zbor.size(); i++)
            znaci.push_back(zbor[i]);
        function();
    
        string a = result();
        cout << a << endl;
        return 0;
    }
     
  12. NT.NT.

    NT.NT.
    Гостин

    Ако може на поедноставен начин, нешто во стил на мојот код само изменет?

    Во С++ секогаш завршува со притискање на било кое копче, но тоа не е важно искрено важен ми е алгоритамот.
     
    Изменето од модератор: 10 Март 2019
  13. SmartGuru

    SmartGuru
    Gaining Experience

    307
    270
    27 Јануари 2013
    Машко
    Junior Ruby on Rails Developer
    Под услов да се внесува string во кој секоја непарна позиција е едноцифрен број тогаш:

    Код:
    #include <iostream>
    using namespace std;
    
    int main(){
        string zbor;
        cout << "Vnesi zbor:" << endl;
        getline(cin, zbor);
        for (int i=0; i < zbor.size(); i+=2){
            cout << string(zbor[i] - '0', zbor[i+1]);
        }
    }
    
     
    Последна промена: 10 Март 2019
  14. 100JKO

    100JKO
    Gaining Experience

    28
    86
    27 Јуни 2018
    Машко
    Intern
    Сега?
    Код:
    #include <iostream>
    using namespace std;
    
    int main()
    {
        int br, a;
        char znak;
        string s;
        cin >> s;
    
        for(int i = 0; i < s.size(); i += 2) {
            a = 0;
            znak = s[i];
            br = (int)znak - 48;
            while(a < br) {
                cout << s[i + 1];
                a++;
            }
        }
        return 0;
    }
    
     
    Последна промена: 10 Март 2019
    На Banjifiko му/ѝ се допаѓа ова.
  15. dddragan

    dddragan
    Gaining Experience

    183
    190
    12 Август 2014
    Машко
    Зошто не ја искористиш isdigit? Поточно решение од тоа нема да најдеш. Го изминуваш стрингот карактер по карактер, ако е бројка го додаваш у инт променлива, ако е втора бројка го множиш инт-от со 10 и го додаваш пак бројот итн. Во првиот момент на карактер што не е бројка, го испишуваш толку пати карактерот колку што имаш во инт-от, го сетираш инт-от на 0 и продолжуваш со следен карактер.
     
  16. JensenInterceptor

    JensenInterceptor
    Gaining Experience

    511
    203
    28 ноември 2015
    Машко
    C++ - Hold the console window open?
    Хмм ако нешто ти олеснува да биде отворен прозорот.

    Не знам дали ќе биде поедноставно, но јас би ја пратил низата од знаци како параметар на function(zbor) -> function("8K4Q5L") без притоа да ја чувам пристапна низ целата програма.

    А кодот на функцијата result() може да стане дел од function() испод постоечкиот код. Такоречи се може да завршиш во една функција, што би значело
    Код:
    string function(vector<char>  zbor)
    {
        string ishod;
       // code
        return ishod;
    }
    
    Би се упростило мислам. И да би ја крстил со друго име, на пример:

    string presmetaj(vector<char> zbor).

    Хмм, дури и делот кај што zbor[ i ] го ставаш во znaci во Main() може да влезе во function()

    Нешто вака?

    Код:
    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    string presmetaj(vector<char> zbor)
    {
        string ishod;
        vector<char>bukvi;
        vector<int> faktorKratnost;
        vector<char>znaci;
       
        for (int i = 0; i < zbor.size(); i += 1)
        {
            znaci.push_back(zbor[i]);
        }
       
        for (int i = 0; i < znaci.size(); i += 1)
        {
            if (znaci[i] >= '2' && znaci[i] <= '9')
                faktorKratnost.push_back(int(znaci[i] - 48));
            else if (znaci[i] >= 'A' && znaci[i] <= 'Z')
            {
                bukvi.push_back(znaci[i]);
               
                if (i - 1 < 0 || (znaci[i - 1] >= 'A' && znaci[i - 1] <= 'Z'))
                {
                    faktorKratnost.push_back(1);
                }
            }
        }
       
        for (int i = 0; i < bukvi.size(); i += 1)
        {
            for (int j = 0; j < faktorKratnost[i]; j += 1)
            {
                ishod.push_back(bukvi[i]);
            }
        }
       
        return ishod;
    }
    
    int main()
    {
        string zbor;
        cin >> zbor;
       
        string ishod = presmetaj(zbor);
    
        cout << ishod << endl;
        return 0;
    }
    
     
    Последна промена: 10 Март 2019
Слични теми
  1. AndrejGagale
    Одговори:
    6
    Прегледи:
    1,104
  2. Phenomen
    Одговори:
    5
    Прегледи:
    743
  3. Zeuus
    Одговори:
    4
    Прегледи:
    583
  4. Alexman46
    Одговори:
    2
    Прегледи:
    310
  5. Alexman46
    Одговори:
    6
    Прегледи:
    471
Вчитување...

Сподели

Вчитување...