webForumDet fria alternativet

Problem.. behöver hjälp snabbt!

6 svar · 324 visningar · startad av voigtann1

voigtann1Medlem sedan juni 20019 519 inlägg
#1

Har några "uppgifter":
1. jag ska göra ett program som räkna ord, detta är inte problemet.. men det står sen "för att beräkna antal tecken i strängen så ska man räkna tecken ändta tills man stöter på nolltecknet, dvs '\0'. en while-loop är rimlig att använda.

#include <iostream.h>
#include <conio.h>

void main()
{
   char ord[40];
   int rakna;

   cout << "Mata in ett ord: ";
   cin.get(ord,40);
   cin.ignore(1000,'\n');
   while (ord[0] != '\0')
   {
      rakna = strlen(ord);
      cout << "Ordet " <<ord <<" innehaller " << rakna <<" bokstaver." <<endl;
      cout << "Mata in ett ord: ";
      cin.get(ord,40);
      cin.ignore(1000,'\n');
   }
   getch();
}

nästa..:
jag har en sträng som heter namn[] = "Sten den store"
nu ska "store" ändras till "yngre" fick använda namn[1] = "y", namn[2] = 'n'; men detta bör man ju kunna skriva enklare

hur gör man att en sträng skrivs spegelvänt?

PeWMedlem sedan juni 200010 432 inlägg
#2

Skoluppgift va?
Tänker inte lägga upp färdig kod av den anledningen, men lite hintar kan du få..

nästa..:
jag har en sträng som heter namn[] = "Sten den store"
nu ska "store" ändras till "yngre" fick använda namn[1] = "y", namn[2] = 'n'; men detta bör man ju kunna skriva enklare

hur gör man att en sträng skrivs spegelvänt?

Du kör ju inte med STL och jag antar att ni inte ska det heller. Men du bör ju iaf leta reda på strängen som innehåller det "rätta" ordet och helt enkelt byta ut det mot andra. Men så mycket "enklare" än att ersätta bokstav för bokstav blir det inte, inte ens om du använder pekare (while(*(s++)=*(t++))!=0) . Så det enklaste sättet är att ha en färdig sträng som du ersätter med tecken för tecken.

Spegelvända blir samma sak. Ska du bara skriva ut en sträng spegelvänt är det lätt att göra

int len = strlen(ordet)-1;
for(;len>=0;len--)
  cout << ordet[len];

vilket även kan användas för att kopiera in i ytterligare en sträng.. ;)

Sang-draxMedlem sedan juli 2002581 inlägg
#3

PeW skrev:

Men så mycket "enklare" än att ersätta bokstav för bokstav blir det inte,

Tja.. om
namn[] = "Sten den store"
kan man ju skriva
strcpy(namn+9,"yngre");

PeWMedlem sedan juni 200010 432 inlägg
#4

Sant om det är samma storlek på arrayerna. Ska man verkligen utgå från det (?) ... svårt att veta.. men kör till i det här fallet! :bire

voigtann1Medlem sedan juni 20019 519 inlägg
#5

Tackar för hjälpen! allt fungera super!

Sang-draxMedlem sedan juli 2002581 inlägg
#6

PeW skrev:

Sant om det är samma storlek på arrayerna. Ska man verkligen utgå från det (?) ... svårt att veta.. men kör till i det här fallet! :bire

Då säger jag så här då:

strncpy(namn+9,"yngre",5);

PeWMedlem sedan juni 200010 432 inlägg
#7

Jaja, men det är ändå samma sak som det jag skrev... fast det är en funktion i ett lib som utför samma sak. Vad som är "enkelt" är en definitionsfråga och jag ser iaf inget större besvär i att ha nån rad kod mer för att göra det så tydligt som möjligt - speciellt om det är en skoluppgift. Men som sagt så är det svårt att veta exakt vad som efterfrågades ;) ...det hade dock kanske varit bättre med

annat_ord[]="yngre";
namn[pos] = '\0';
strncat(namn,annat_ord,strlen(annat_ord));

För att slippa trassel om det nya ordet är längre än det gamla. Fast det förutsätter att ordet är sist, i annat fall blir det såklart mer. Men eftersom trådskaparen är nöjd nu, varför älta mer i detta ;)

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)