Hogyan lehet Strrev () utasítás készlet futtatni linux alatt?
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 :)
#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;
}
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);
}
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!