5.3

#include <cstring>
#include <iostream>
#include <cstdlib>
using namespace std;
void vand(char *s);
 
int main() {
  char temp[100];
  cout << "Skriv in en sträng: ";
  cin.getline(temp,100);
  vand(temp);
  cout << "Stängen vänd:\n" << temp << endl;
  system("PAUSE");	
  return 0;
}
 
 
void vand(char *s) {
  char c, *p1, *p2;
  p1 = p2 = s; // Båda pekar på starten
  while (*p1) { // p1 pekar på \0
    *p1++;
  }
  p1--; // pekar på slutet
  while (p1>p2) {
    c = *p1; *p1 = *p2; *p2 = c;  // byt plats
    p1--;
    p2++;
  }
}

5.7

// returnerar true om kopieringen gick bra
 
bool kopiera(char *till, char *fran, int n) {
  for (int i=0; i<n; i++) {
    if (! (*till++ = *fran++)) {
      return true;  // nolltecken kopierades
    }
  }
 
  * --till = '\0';  // misslyckades, lägg nolltecken sist
  return false;
}

5.8

void strcat(char *till, char *fran) {
  while (*till) {  // sök nolltecknet
    till++;
  }
  while (*till++ = *fran++) {  // kopiera
    ;
  }
}

5.15

#include <cstring>
#include <iostream>
#include <cstdlib>
using namespace std;
 
// Funktionen returnerar ett kryss respektive en ring om någon
// av spelarna har vunnit. Har ingen vunnit returneras värdet '#'.
// Har båda vunnit retuneras det som först påträffas, ska ju inte kunna hända
char vinnare(char a[3][3]);
 
int main() {
  char a[3][3] = {{' ','x','o'},{'x','o',' '},{'o','x',' '}}, temp;
  // Skriver ut spelplan
  for (int i = 0 ; i < 3 ; i++) {
    for (int j = 0 ; j < 3 ; j++) {
      cout << a[i][j];
    }
    cout << endl;
  }
  temp = vinnare(a);
  cout << endl;
  if (temp != '#') {
    cout << temp << " vann" << endl;
  } else {
    cout << "ingen vann!" << endl;
  }  
  system("PAUSE");	
  return 0;
}
 
 
 
char vinnare(char a[3][3]) {
   int i;
   // kontrollera diagonaler
   if (a[0][0]==a[1][1] && a[0][0]==a[2][2] && a[0][0]!=' ') {
     return a[0][0];
   }
   if (a[0][2]==a[1][1] && a[0][2]==a[2][0] && a[0][2]!=' ') {
     return a[0][2];
   }
 
   // kontrollera rader
   for (i=0; i<3; i++) {
     if (a[i][0]==a[i][1] && a[i][0]==a[i][2] && a[i][0]!=' ') {
       return a[i][0];
     }
   }
 
   // kontrollera kolumner
   for (i=0; i<3; i++) {
     if (a[0][i]==a[1][i] && a[0][i]==a[2][i] && a[0][i]!=' ') {
       return a[0][i];
     }
   }
   return '#';
}