Kezdőoldal » Számítástechnika » Programozás » Hogyan lehet Strrev () utasítá...

Krioszhun kérdése:

Hogyan lehet Strrev () utasítás készlet futtatni linux alatt?

Figyelt kérdés

sziasztok tudna nekem valaki segíteni? irtam egy calculator programot c-be (egy beadandó), a problémám az, h lefut a program, de linux alatt nem kezeli a strrev() utasítást, igy a program ott nem fut le. :(

Ami elég nagy baj, mert linux alatt megy a pontozás. tudna valaki ebben nekem segíteni??? fontos lenne ....

remélem van valaki aki tud segíteni :)


2016. nov. 16. 19:32
 1/2 anonim ***** válasza:

#include <string.h>


char *strrev(char *str)

{

char *p1, *p2;


if (! str || ! *str)

return str;

for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)

{

*p1 ^= *p2;

*p2 ^= *p1;

*p1 ^= *p2;

}

return str;

}

2016. nov. 16. 19:47
Hasznos számodra ez a válasz?
 2/2 A kérdező kommentje:

Találtam egy programot ami rohadt jól lefut messze jobb mint az enyém, de ugyanaz a problémája mint az enyémnek nem fut linux alatt a a Strrev miatt,és fogalmam nincs hogy kellátalakítani ahoz h menjem... ugytűnik kevés vagyok hozzá rendesen ;( és kifutok az időből is... :

remélem az eredeti programozó nem haragszik meg azért h megmutatom ő mit hozott létre .. nekem tetszik :)

/*

Programot készítette : Tipcike

2004.12.14. Kedd


Szabályok.

1. Ha a mûvelet és a második operandus elõjele megegyezik akkor a mûvelet összeadás

Ha különbözik akkor a mûvelet kivonás.

2. Ha az elsõ operandus elõjele negatív akkor az 1. pontban kiszámolt mûveletet

megcseréljük. Ha összeadás volt akkor kivonás lesz és fordítva.

3. Ha a mûvelet kivonás és a második operandus nagyobb mint az elsõ akkor

felcseréljük a két operandust és az eredmény elõjele az ellenkezõjére

változik mint amilyen az elsõ operandusé volt.

4. Most már elvégezhetjük az összeadást illetve a kivonást. A 3.pontban kiszámolt

elõjel lesz az eredmény elõjele.

*/

#include <stdio.h>

#include <ctype.h>

#include <string.h>



void strrev(char *s1)

{ int c;

for(int i=0;i<(strlen(s1)/2);i++)

{ c=s1[i];

s1[i]= s1[strlen(s1)-i-1];

s1[strlen(s1)-i-1]= c;

}

}


void osszeadas(char *s1, char *s2)

{

int i, c;


c = 0;

for (i = strlen(s1) - 1; i >= 0; i--)

{ c = s1[i] + s2[i] + c - 96;

s1[i] = c%10 + 48;

c = c/10;

}


/* Felesleges nullák eltávolítása a string elejérõl */



/* ------------------------------------------------------------------------- */

void kivonas(char *s1, char *s2)

{

int i, c;


c = 0;

for (i = strlen(s1) - 1; i >= 0; i--)

{ c = s1[i] - s2[i] - c + 10;

s1[i] = c%10 + 48;

if (c > 9) c = 0;

else c = 1;

}


/* Felesleges nullák eltávolítása a string elejérõl */


/* ------------------------------------------------------------------------- */

/* ------------------------------------------------------------------------- */

/* ------------------------------------------------------------------------- */

int main ()

{

char s1[255],s2[255],muv[1],elo[2];

FILE *inp,*out;

int i,c;


inp = fopen("be.txt","r"); /*A be.txt file megnyitása olvasásra */

out = fopen("ki.txt","w"); /*A ki.txt file megnyitása írásra */

if (inp==NULL)

{

fprintf(stderr,"be.txt nem létezik!\\\\n"); getchar(); /*Amennyiben be.txt nem létezik, hibaüzenetet küld a stderr-re (képernyo) */

return 0;

}


fscanf(inp,"%s\\\\n", s1); /*Elso decimális szám beolvasása */

fscanf(inp,"%s\\\\n", muv); /*Elso muveleti jel beolvasása */


while (muv[0] != '=')

{

fscanf(inp,"%s\\\\n", s2); /*Második decimális szám beolvasása */


/*Az elöjeleket az elõjelek tömbbe másoljuk és töröljük õket a operandusból*/

if (isdigit(s1[0])) elo[0] = '+';

else

{ elo[0] = s1[0];

s1[0] = '0';

}

if (isdigit(s2[0])) elo[1] = '+';

else

{ elo[1] = s2[0];

s2[0] = '0';

}


/* A két operandust azonos méretre hozzuk úgy, hogy a rövidebb string elejére

nulla karaktereket szúrunk be.

Sajnos ebben az idétlen C nyelvben nem találtam olyan utasítást ami egy

string elejére betudna szúrni egy 0-át, ezért a stringeket megfordítom és

így a vége lesz az eleje. A végét már megtudom karakterekkel toldani.

Majd a végén vissza fordítom az egészet. */



/* Most eldöntjük, hogy összeadni kell a két operandust vagy kivonni a

szabályok figyelembe vételével. */

/*1.*/

if (muv[0] == elo[1]) muv[0] = '+';

else muv[0] = '-';

/*2.*/

if (elo[0] == '-')

{ if (muv[0] == '+') muv[0] = '-';

else muv[0] = '+';

}

/*3.*/

if ((muv[0] == '-') && (strcoll(s1, s2) < 0))

{ for (i = 0; i <= 255; i++)

{ c = s1[i];

s1[i] = s2[i];

s2[i] = c;

}

if (elo[0] == '+') elo[0] = '-';

else elo[0] = '+';

}

/*4.*/

if (muv[0] == '+') osszeadas(s1, s2);

else kivonas(s1, s2);


/* Az eredmény elõjelét csak akkor tesszük ki ha negatív és nem nulla */

if ((elo[0] == '-') && (strcoll(s1, "0") != 0))

{ strrev(s1);

strcat(s1, "-");

strrev(s1);

}


/* Következõ müvelet beolvasása */

fscanf(inp,"%s\\\\n", muv);

}


fprintf(out, "%s", s1);

fflush(out); /*Memória felszabadítása és fájlok lezárása */

fclose(inp);

fclose(out);

}

2016. nov. 16. 21:51

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!