Я работаю с массивами в C ++. Таким образом, мой ввод в массив O3B4F2, и я хочу иметь в выводе OOOBBBBFF? .. Я читаю о функции 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 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;
}
Для вашего первого случая, как упоминалось в комментариях, нет необходимости использовать 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
,