Gå til innhold

[Løst] c++ hjelp - problemer med å convertere string til store bokstaver


Anbefalte innlegg

Skrevet

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;

}

Videoannonse
Annonse
Skrevet

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.

Skrevet

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 :/

Skrevet
#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;
}

Skrevet

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.

  • Liker 1

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...