Ex på lösningar för uppgifterna 3, 7, 8 och 15
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 '#'; }