Я работаю с массивами на C++. Итак, мой вход в массив - O3B4F2, и я хочу, чтобы на выходе было ОООBBBBFF? .. Я читаю о функции strtrok, но не понимаю, что это действительно хорошо, потому что она разделяет предложения на токены.
#include <iostream>
#include <string.h>
#include<stdlib.h>
using namespace std;
int main ()
{
char a[100+1];
cin>>a;
char * pch;
char dioba[] = "0 1 2 3 4 5 6 7 8 9 ";
pch = strtok (a,dioba);
int c;
for(int i=0;i<strlen(a);i++)
{
if (isdigit(a[i])==1)
{
}
}
while (pch != NULL)
{
cout<<pch<<endl;
pch = strtok (NULL,dioba);
}
return 0;
}
Также я пытаюсь решить аналогичную задачу, где мне нужно разделить массив на наборы букв. Мне нужен вывод идти, и я хочу, чтобы мой вывод выглядел как должен идти. Поэтому после буквы e и o я хочу использовать пробел или новую строку.
#include <iostream>
#include <iostream>
#include <string.h>
#include<stdlib.h>
using namespace std;
int main ()
{
char a[100+1];
cin>>a;
char b[100+1];
int i=0,j=0;
for(i;i<strlen(a);i++)
{
if (a[i]=='a'||a[i]=='e'|| a[i]=='i')
for(j;j<strlen(a);j++)
{
b[j]=' ';
}
b[j]= a[i];
cout<<b<<endl;
}
return 0;
}
Re: if (isdigit(a[i])==1) - не пойдет. Прочтите документация для std::is digit.





В вашем первом случае, как упоминалось в комментариях, нет необходимости использовать strtok. Вот пример кода (хотя есть много способов выполнить запрошенную задачу):
#include <iostream>
#include <string>
#include <sstream>
int main ()
{
std::string s;
std::cin >> s;
std::istringstream stream(s);
char pch;
// fetch stream for the character to repeat until the end of the string
while( stream >> pch )
{
char nbChars;
// fetch length for repetition
stream >> nbChars;
// convert character to its integer value
nbChars -= '0';
// repeat character as many times as needed
for(int i=0; i < nbChars;i++)
{
std::cout << pch;
}
}
return 0;
}
Для вашей второй задачи я предлагаю этот образец кода, вы можете изменять буквы по мере необходимости.
#include <iostream>
#include <string>
int main ()
{
std::string s;
std::string needSpaceChars{"aeo"};
// read content on standard input
std::getline(std::cin, s);
// for each char, check its value and add space after the letters defined in needSpaceChars variable
for(char pch: s)
{
// display character first
std::cout << pch;
// add space if character is in the list of characters to handle
if ( needSpaceChars.find(pch) != std::string::npos )
{
std::cout << ' ';
}
}
return 0;
}
Как вы описали проблему, ввод всегда будет в виде char, за которым следует int. Следовательно, вы должны выбрать пару (char, int) и распечатать ее согласно правилу.
for(size_t i = 0; i < arr.size() - 1;) {
int val = (int)arr[i+1] - 48;
for(auto j = 0; i < val; j++) {
cout << arr[i];
}
i += 2;
}
for() предназначен для прохождения всего arr.for() предназначен для печати конкретного char по количеству вхождений.Примечание. Поскольку данный arr относится к типу char, вам необходимо преобразовать второй элемент пары из char в int.
Вы можете использовать обход input char [] по индексу или по указателю, не нужно использовать strtok. Что касается сопоставления цифровых символов с числами, общий трюк заключается в использовании
c - '0'для получения цифрового значения.