Стани премиум член и добиј попуст на 2000+ производи и куп други бенефити!
  • Важно
    Имате проблем со најава или регистрација на it.mk?
    Побарајте го решението на вашиот проблем ТУКА!

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

  • Ја почнал/а темата NT.NT.
  • Време на почнување
  • Ознаки
    c++
N

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;
}

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

Pulse

Practice makes perfect
26 октомври 2014
1.456
1.545
127.0.0.1
petrov.mk
Доколку имам задача каде треба да направам програма во која корисникот внесува збор на пример: 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;
}

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

Незнам во ц++, ама еве ти ја решив во јаваскрипт.
Горе долу алгоритмот го имаш, само синтаксата е различна.
бтњ претпоставив дека бројот пред буквата може да биде во рејнџ од 0 до 999.
Код:
https://jsfiddle.net/6h1dj82y/
 
Последна промена:

OldSchoolPvP

Practice makes perfect
13 февруари 2014
744
1.169
Shutter Island
Еве единствен начин како би започнала:

#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;
}

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

Задачата ти вика дека не треба да се внесува должина на зборот а ти веке почнуваш да ја решаваш со тоа што внесуваш должина.
Пробај со стрингови.

Код:
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;
}
 
N

NT.NT.

Гостин
Задачата ти вика дека не треба да се внесува должина на зборот а ти веке почнуваш да ја решаваш со тоа што внесуваш должина.
Пробај со стрингови.

Код:
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;
}
Компајлерот ми јавува грешка кај споредбата (дисјункцијата) - '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;
}
 
Изменето од модератор:

OldSchoolPvP

Practice makes perfect
13 февруари 2014
744
1.169
Shutter Island
Кај споредбата треба да стои str [ i ] бидејки споредуваш само 1 карактер од низата .
А strlen ти е функција која врака должината на стрингот и се наога во string.h heder.
 
N

NT.NT.

Гостин
Кај споредбата треба да стои str [ i ] бидејки споредуваш само 1 карактер од низата .
А strlen ти е функција која врака должината на стрингот и се наога во string.h heder.
Го изменив коментарот и програмата, но сѐ уште програмчето не работи.
Код:
#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[]; или нешто.
 
Изменето од модератор:

100JKO

On your way to fame
27 јуни 2018
302
812
Скопје
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;
}
 
N

NT.NT.

Гостин
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;
}
Сѐ тоа е во ред, но поентата е што според задачата не треба корисникот да внесува број на букви, јас треба да направам програма која сама ќе го одреди тоа.
 

100JKO

On your way to fame
27 јуни 2018
302
812
Скопје
Сѐ тоа е во ред, но поентата е што според задачата не треба корисникот да внесува број на букви, јас треба да направам програма која сама ќе го одреди тоа.
Треба со Ентер да прекине програмата или?
 

JensenInterceptor

Gaining Experience
28 ноември 2015
577
230
Скопје
tunephp.blogspot.com
JensenInterceptor's setup  
Processor & Cooler
i5-7500 Kabylake
Motherboard
Asus Prime b250m plus
Storage
1TB HDD Western Digital
PSU
Cooler Master 500 Watt
RAM
16 GB, DDR 4, 2133 MHz, Non-ECC, DIMM, CL15
Video card
GeForce GTX 1050 2B
Case
Cooler Master Elite 343
OS
Dual boot: Ubuntu 16.04, Windows 10
Хмм, ако си сто посто сигурна дека секогаш во низата од знаци, секој непарен знак е бројка, а секој парен е буква, тогаш расцепи ја низата од знаци и анализирај го секој знак од прв до последен посебно.

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

Не знам со Ц++ како се прави ама во Це Шарп има функција што се вика 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 во цел број за да работи.
 
Изменето од модератор:

Bontino2

Intern
21 ноември 2012
170
17
Еве решение во ц++

Код:
#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;
}
 
N

NT.NT.

Гостин
Еве решение во ц++

Код:
#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;
}
Ако може на поедноставен начин, нешто во стил на мојот код само изменет?

Треба со Ентер да прекине програмата или?
Во С++ секогаш завршува со притискање на било кое копче, но тоа не е важно искрено важен ми е алгоритамот.
 
Изменето од модератор:

SmartGuru

Gaining Experience
27 јануари 2013
350
345
www.kennedytech.mk
Под услов да се внесува 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]);
    }
}
 
Последна промена:

100JKO

On your way to fame
27 јуни 2018
302
812
Скопје
Сега?
Код:
#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;
}
 
Последна промена:

dddragan

On your way to fame
12 август 2014
388
523
Зошто не ја искористиш isdigit? Поточно решение од тоа нема да најдеш. Го изминуваш стрингот карактер по карактер, ако е бројка го додаваш у инт променлива, ако е втора бројка го множиш инт-от со 10 и го додаваш пак бројот итн. Во првиот момент на карактер што не е бројка, го испишуваш толку пати карактерот колку што имаш во инт-от, го сетираш инт-от на 0 и продолжуваш со следен карактер.
 

JensenInterceptor

Gaining Experience
28 ноември 2015
577
230
Скопје
tunephp.blogspot.com
JensenInterceptor's setup  
Processor & Cooler
i5-7500 Kabylake
Motherboard
Asus Prime b250m plus
Storage
1TB HDD Western Digital
PSU
Cooler Master 500 Watt
RAM
16 GB, DDR 4, 2133 MHz, Non-ECC, DIMM, CL15
Video card
GeForce GTX 1050 2B
Case
Cooler Master Elite 343
OS
Dual boot: Ubuntu 16.04, Windows 10
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;
}
 
Последна промена:

Нови мислења

Последни Теми

Онлајн администрација

Статистика

Теми
46.044
Мислења
954.460
Членови
34.468
Огласи
2.273
Најнов член
idriz
На врв Дно