Já nějak nevidim důvod to procházet po znacích, když to později chceš jen kvůli tomu, aby si přidal mezery... ten formát má pevně danný rozmezí (2 písmena, 3 čísla, 2 písmena) = 7 znaků pro každý SPZ
trochu jsem to rozšířil pro generování spz a volitelných formátem, takže si všimni pouze fce injectSpaces(...)
není potřeba procházet po znacích, když víš, kde přesně má být mezera, potom jen poskládáš nový SPZ s mezerama
#define _CRT_SECURE_NO_WARNINGS
#define SPZ_PREFIX_LENGTH 2 // pocet znaku v prefixu
#define SPZ_SUFFIX_LENGTH 2 // pocet znaku v suffixu
#define SPZ_NUMBER_LENGTH 3 // delka cisla
#define SPZ_LENGTH (SPZ_PREFIX_LENGTH + SPZ_SUFFIX_LENGTH + SPZ_NUMBER_LENGTH)
#include <iostream>
using namespace std;
// nahodne pismeno mezi A-Z
char randomUpperCaseLetter()
{
return rand() % ('Z' - 'A') + 'A' + 1;
}
// nahodne cislo jako char
char randomNumberAsChar()
{
return rand() % 9 + '0';
}
// pro generaci SPZ (prvni N znaku)
char* randomSpzPrefix()
{
char prefix[SPZ_PREFIX_LENGTH + 1];
for (int i = 0; i < SPZ_PREFIX_LENGTH; i++) {
*(prefix + i) = randomUpperCaseLetter();
}
*(prefix + SPZ_PREFIX_LENGTH) = '\0';
return prefix;
}
// pro generaci SPZ (poslednich N znaku)
char* randomSpzSuffix()
{
char suffix[SPZ_SUFFIX_LENGTH + 1];
for (int i = 0; i < SPZ_SUFFIX_LENGTH; i++) {
*(suffix + i) = randomUpperCaseLetter();
}
*(suffix + SPZ_SUFFIX_LENGTH) = '\0';
return suffix;
}
// pro generaci SPZ (cislo v SPZ)
char* randomSpzNumber()
{
char num[SPZ_NUMBER_LENGTH + 1];
for (int i = 0; i < SPZ_NUMBER_LENGTH; i++) {
*(num + i) = randomNumberAsChar();
}
*(num + SPZ_NUMBER_LENGTH) = '\0';
return num;
}
// generuje SPZ
char** generateSpz(int count)
{
char** spzs = new char*[count];
for (int i = 0; i < count; i++) {
char* spz = new char[SPZ_LENGTH + 1];
strcpy(spz, randomSpzPrefix());
strcat(spz, randomSpzNumber());
strcat(spz, randomSpzSuffix());
*(spz + SPZ_LENGTH) = '\0';
*(spzs + i) = spz;
}
return spzs;
}
// vypise pole slov
void printCharArray(char** arr, int count)
{
for (int i = 0; i < count; i++) {
cout << *(arr + i) << endl;
}
}
// vetkne mezeru mezi prefix/cislo/suffix
void injectSpaces(char** spzs, int count)
{
for (int i = 0; i < count; i++) {
char* newSpz = new char[SPZ_LENGTH + 3];
int pos = 0;
memcpy(newSpz + pos, *(spzs + i), SPZ_PREFIX_LENGTH);
pos += SPZ_PREFIX_LENGTH;
*(newSpz + pos++) = ' ';
memcpy(newSpz + pos, *(spzs + i) + SPZ_PREFIX_LENGTH, SPZ_NUMBER_LENGTH);
pos += SPZ_NUMBER_LENGTH;
*(newSpz + pos++) = ' ';
memcpy(newSpz + pos, *(spzs + i) + SPZ_PREFIX_LENGTH + SPZ_NUMBER_LENGTH, SPZ_SUFFIX_LENGTH);
pos += SPZ_SUFFIX_LENGTH;
*(newSpz + pos) = '\0';
delete *(spzs + i);
*(spzs + i) = newSpz;
}
}
// odebere vsechny SPZ
void deleteSpzs(char** spzs, int count)
{
for (int i = 0; i < count; i++) {
delete *(spzs + i);
}
delete[] spzs;
}
int main()
{
// v tvem pripade asi ze souboru nebo jako staticky...
const int count = 8;
char** spzs = generateSpz(count);
printCharArray(spzs, count);
injectSpaces(spzs, count); // pridani mezer do SPZ
cout << endl;
printCharArray(spzs, count);
deleteSpzs(spzs, count); // uvolneni SPZ
return EXIT_SUCCESS;
}
Výstup je potom jako (pro 8 SPZ)
RS748ZE
JN282HD
MR783MR
FD047WR
TV202OU
NS173EM
XJ623ME
TX516NK
RS 748 ZE
JN 282 HD
MR 783 MR
FD 047 WR
TV 202 OU
NS 173 EM
XJ 623 ME
TX 516 NK