cool_water Skrevet 13. september 2011 Del Skrevet 13. september 2011 Hei! Jeg spør om hjelp igjen jeg Men jeg har nå lagd et program som sorterer en streng og sjekker om det er et anagram. Funker so far, men når jeg gjør alt om til uppercase så skjærer det seg. Jeg har strengene i en tabell, men om det er en stor bokstav i strengen, så blir strengen til et tall. (Neste i ascii tabellen) Vet ikke helt hvordan jeg skal løse dette. Takk for hjelpen i allefall Her har dere koden til uppercase: char uppercase(char c) { if ((c>='a')||(c<='z')) c -= 'a'-'A'; return c; } Lenke til kommentar
geir__hk Skrevet 13. september 2011 Del Skrevet 13. september 2011 De fleste programmeringsspråk kan ikke addere eller subtraktere strenger direkte. Man "oversetter" bokstaven til en byte før man trekker fra eller adderer. Tror du finner svaret på dette forumet. Lenke til kommentar
Dinosauromann Skrevet 13. september 2011 Del Skrevet 13. september 2011 De fleste programmeringsspråk kan ikke addere eller subtraktere strenger direkte. Man "oversetter" bokstaven til en byte før man trekker fra eller adderer. Tror du finner svaret på dette forumet. Funkjsonen hans opererer på en byte allerede. Du må ha && i if-setningen, ettersom du vil at funksjonen skal kjøres på bokstaver fram og med 'a' til og med 'z', nå kjører den på bokstaver som er større eller lik 'a', ELLER, mindre eller lik 'z'. Om det ikke er et krav at du skriver funksjonen selv, kan du bruke funksjonen toUpper i standardbiblioteket. Lenke til kommentar
cool_water Skrevet 14. september 2011 Forfatter Del Skrevet 14. september 2011 Hmm, jeg har prøvd den toupper funksjonen, men fremdeles så blir det største bokstaven i strengen satt først, den blir ikke med i sorteringen, mens alle små blir gjort om til stor kommer etter :/ Lenke til kommentar
Dinosauromann Skrevet 14. september 2011 Del Skrevet 14. september 2011 Du kan jo poste resten av koden, vanskelig å si når vi ikke vet hva som foregår. Lenke til kommentar
cool_water Skrevet 14. september 2011 Forfatter Del Skrevet 14. september 2011 #include <iostream> #include <string> #include <cctype> using namespace std; template<class T> void sort(T a[], int numberUsed); template<class T> void swapValues(T& variable1, T& variable2); template<class T> int indexOfSmallest(const T a[],int startIndex, int numberUsed); char upperCase(char c); int main() { const int SIZE = 13; char stringA[size] = {'T', 'w', 'e', 'l', 'v', 'e', 'p', 'l', 'u', 's', 'o', 'n', 'e'}; char stringB[size] = {'e', 'l', 'e', 'v', 'e', 'n', 'p', 'l', 'u', 's', 't', 'w', 'o'}; cout << "Unsorted characters:\n"; for(int index = 0; index < SIZE; index++) cout << stringA[index] << " "; cout << endl; for(int index = 0; index < SIZE; index++) cout << stringB[index] << " "; cout << endl; sort(stringA, SIZE); sort(stringB, SIZE); cout << "In sorted order the characters are:\n"; char tabA[size]; for(int i = 0; i < SIZE; i++) { cout << upperCase(stringA[i]); tabA[i] = stringA[i]; } cout << endl; char tabB[size]; for(int i = 0; i < SIZE; i++) { cout << upperCase(stringB[i]); tabB[i] = stringB[i]; } cout << endl; if((strcmp(tabA, tabB)) == 0) cout << "Its an anagrame, hurray!" << endl; else cout << "Sorry to disappoint you, but its not an anagram." << endl; return 0; return 0; } char upperCase(char c) { if ((c>=65)&&(c<=122)) { if((c >=97)&&(c<=122)) c -= 32; } return c; } template<class T> void sort(T a[], int numberUsed) { int indexOfNextSmallest; for(int index = 0; index < numberUsed; index++) { indexOfNextSmallest = indexOfSmallest(a, index, numberUsed); swapValues(a[index], a[indexOfNextSmallest]); } } template<class T> void swapValues(T& variable1, T& variable2) { T temp; temp = variable1; variable1 = variable2; variable2 = temp; } template<class T> int indexOfSmallest(const T a[], int startIndex, int numberUsed) { T min = a[startIndex]; int indexOfMin = startIndex; for(int index = startIndex + 1; index < numberUsed; index++) { if(a[index] < min) { min = a[index]; indexOfMin = index; } } return indexOfMin; } Lenke til kommentar
Dinosauromann Skrevet 14. september 2011 Del Skrevet 14. september 2011 Det er slik std::sort fungerer, den vil som standard sortere bokstavene etter ascii-verdien (som vil si at store bokstaver kommer før små.). Derfor bør du konvertere til store bokstaver FØR du sorterer. Anbefaler også å bruke string, og ikke char-arrays. 1 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå