Anonymní profil Sprinter – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Sprinter – Programujte.comAnonymní profil Sprinter – Programujte.com

 

Příspěvky odeslané z IP adresy 37.188.248.–

Sprinter
C / C++ › Problém s indexem pole
4. 1. 2013   #169776

#7 Furynka
No podle všeho mám v tom IF-THEN špatně ukládání do pole. Pokud se mi první znak bude ukládat na pozici m, tak mi to přesně na tom Vašem případě udělá chybu.. Když to ale nahradím count, čímž umožním, aby mi ukládání pokračovalo tam, kde jsem posledně skončil, tak mi to také nefunguje správně...

Zkouším si to rezepsat na papír a najít další chybu, ale zatím to mám takto:

if (column_buffer[m] == '@' && line_buffer[m] == temp[0])
{
	pom_1[count] = ':';
	pom_2[count] = ':';
	int n;
	for (n = 1; temp[n] != '\0'; n++)
	{
		pom_1[count + n] = temp[0];
		pom_2[count + n] = temp[n];
	}	
	pom_1[count + n] = ':';
	pom_1[count + n + 1] = '\0';

	pom_2[count + n] = ':';
	pom_2[count + n + 1] = '\0';

	count = m + n + 1;
	printf("IF %i\n", m);
	printf("IF count %i\n", count);
}
Sprinter
C / C++ › Problém s indexem pole
4. 1. 2013   #169774

#5 Furynka
No v tom for cyklu to proběhne buď v IF, nebo v ELSE.. jiná možnost není (jestli si tedy rozumíme).

Spíš zvažuju, jestli mám celou tu konstrukci dobře.. Nejdřív používám while cyklus, který mi v každým průchodu poskytne jedno "slovo" z pole transfer_form. Takže do for cyklu jde například slovo "S@ab". No jo, ale tímto způsobem mi proběhne celý for cyklus jenom s tímto slovem.. a do podmínky se tak druhé slovo dostane až po ukončení for cyklu... Není to chyba? Nebo už v tom mám chaos? :-)

Sprinter
C / C++ › Problém s indexem pole
4. 1. 2013   #169771

Tak už jsem bezradnej.. vypotil jsem ze sebe toto, ale opět nefunkční...

char *follow;
char pom_1 [100];
char pom_2 [100];
follow = strtok(transfer_form, " ");
char temp [strlen(transfer_form)];
int count = 0;
while (follow != NULL)
{
	strcpy(temp, follow);
	int m;
	for (m = 0; m < strlen(column_buffer); m++)
	{
		if (column_buffer[m] == '@' && line_buffer[m] == temp[0])
		{
			pom_1[m] = ':';
			pom_2[m] = ':';
			int n;
			for (n = 1; temp[n] != '\0'; n++)
			{
				pom_1[m + n] = temp[0];
				pom_2[m + n] = temp[n];
			}
			pom_1[m + n] = ':';
			pom_1[m + n + 1] = '\0';
			
			pom_2[m + n] = ':';
			pom_2[m + n + 1] = '\0';
			
			count = m + n + 1;
		}
		else
		{
			pom_1[count] = line_buffer[m];
			pom_2[count] = column_buffer[m];
			count++;
		}
	}
	follow = strtok(NULL, " ");
}
Sprinter
C / C++ › Problém s indexem pole
4. 1. 2013   #169762

Ahoj, nevím si rady s implementací následujícího problému do jazyka C.

Mám dvě pole - line_buffer a column_buffer. Tyto pole jsou vždy stejně velké a mohou být naplněny například takto:

Po vytvoření tohoto pole přijde na řadu funkce, která když najde znak "@" řekne, že by kombinace {S, @} měla být přepsána například na {S, @}, {S, a}, {S, b}. Tyto kombinace ukládám do pole transfer_form tímto způsobem:

transfer_form = {S@ab A@b B@ab}

První znak znamená o jaké písmeno z pole line_buffer se jedná, zbytek znaků jsou pak prvky z pole column_buffer.

A teď s čím mám problém - potřebuji vytvořit nové dvě pole, zástupné za line_buffer a column_buffer, které by vypadalo takto:

Mám totiž problém s tím, že pokud proběhne podmínka, která vytvoří řetězec ":SSS:" a "ab@", tak pak už nevím, jak říct, aby se znak "A" a "a" ukládal až na index 7 v poli (a zajistit aby se mi nerozhodil zase začátek). Takže kód níže mi funguje pouze do prvního průchodu podmínkou...

char *follow;
char pom_1 [100];
char pom_2 [100];
follow = strtok(transfer_form, " ");
char help [strlen(transfer_form)];
while (follow != NULL)
{
	strcpy(help, follow);
	int o;
	for (o = 0; o < strlen(column_buffer); o++)
	{
		if (column_buffer[o] == '@' && line_buffer[o] == help[0])
		{
			pom_1[o] = ':';
			pom_2[o] = ':';
			int p;
			for (p = 0; help[p] != '\0'; p++)
			{				
				pom_1[o+p + 1] = help[0];
				pom_2[o+p + 1] = help[p + 1];
			}
			pom_1[strlen(pom_1)-1] = ':';
			pom_2[strlen(pom_2)-1] = ':';
		}
		else
		{
			pom_1[o] = line_buffer[o];
			pom_2[o] = column_buffer[o];
		}
	}
	follow = strtok(NULL, " ");
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý