Hoe kun je karakters in een string verschuiven

Status
Niet open voor verdere reacties.

BarryH

Gebruiker
Lid geworden
9 okt 2006
Berichten
14
Ik moet een functie gaan schrijven welke de karakters in een string naar links en naar rechts kan schuiven over N posities. Volgens de opgave moet de functie
void Roteer_Links(char *s, int n) gaan heten.
hieronder een voorbeeld van de opdracht :
De string “abcdefg” over N = 2 verschuiven levert dus “cdefgab”. Schrijf ook de functie Roteer_Rechts.

Nu lukt het me al om een hoeveelheid karakters in een string in te voeren, maar ik heb echt nog geen idee hoe ik de karakters net als in een array kan oproepen en uiteindelijk verschuiven iemand misschien een paar tips??

dit is wat ik tot nu toe heb gemaakt, en gevonden op internet :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int k=0, stop=1, stap, getal, waarde;
//int data[255];
char data [8];
//char aa, invoer;
//strcpy (naam, "testtesttest");
//printf("%s\n", naam);

printf("geef 8 karakters : ");
scanf("%s", &data);
strcpy(data,"%s" );
printf("\n\n");
printf("%s", data);

system("PAUSE");
return 0;
}
 
maar ik heb echt nog geen idee hoe ik de karakters net als in een array kan oproepen en uiteindelijk verschuiven iemand misschien een paar tips??

Een string in C (niet C++) is een array van karakters, je kunt hem dus op dezelfde manier 'aanroepen' als alle andere array's, bijv:

Code:
scanf("%s", &data);

> Hallo

printf("%c", data[1]);

> H

Voor het doorschuiven heb je een 2e array nodig waar je element 1 tm [ingevoerde waarde] in kopieerd, dan de elementen + 1 en als laatste het ingevoerde element.
Probeer eerst maar iets en als je er niet uitkomt help ik wel verder!

gr Niek
 
Hoi Niek,

Ik krijg de karakters in de string verschoven zoals je zegt, alleen lukt het me niet om als je bijvoorbeeld "abcd" in een string hebt dan dmv 1 plaats naar links te schuiven je bcda over houd. Het lukt me inderdaad wel om bcd op het scherm te krijgen, maar om dan die a er weer achter te zetten?? is het misschien mogelijk om bijvoorbeeld die eerste waarde in een andere string te plaatsen en deze weer bij de huidige op te tellen??, ik weet het even niet als iemand een hint heeft zou makkelijk zijn want ik zit helaas even vast
Ook vind ik het vreemd dat ik de string een max van 6 karakters geef en hij alles wat je intypt weergeeft op het scherm, maar daar zal ook wel een truc voor zijn.
Dit is wat ik tot nu toe werkend heb (het klad heb ik even weggehaald)

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char tekst[6]; //string invoer tekst
char copy[6]; //string
char *p; //pointer p
int waarde; //invoer schuifwaarde

printf("Geef een string in, tot max 6 karakters.\n\n"); //invoer tekst
printf("\t\t->"); //invoer positie
scanf("%s",tekst); //lees string waarde in
printf("\n\n"); //sla een regel over
printf("De ingevoerde tekst string is :\t%s\n\n\n",tekst); //ingevoerde text in string

printf("Geef het aantal te schuiven plaatsen (max 6 plaatsen)\n\n"); //invoer tekst
printf("\t\t->"); //invoer positie
scanf("%d", &waarde); //lees schuifwaarde in

p=tekst+waarde; //berekening voor het aantal weer te geven karakters van de string

printf("%s", p); //laat de verschoven waarde op het scherm zien
printf("\n\n");
system("PAUSE");
return 0;
}
 
ik kan niet genoeg C om dit op te lossen, maar hier heb je wel de volledige C++code ;)
Code:
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string tekst; //invoerstring
    int waarde; //invoer schuifwaarde
    int lengte; //de lengte van de invoerstring -> maximaal verschuifbare plaatsen

    cout << "Geef een string in.\n\n"; //invoer tekst
    cout << "\t\t-> "; //invoer positie
    getline(cin,tekst); //lees string waarde in
    cout << endl; //sla een regel over
    cout << "De ingevoerde tekst string is :\t" << tekst; //ingevoerde text in string

    lengte = tekst.length(); //lengte van de string
    
    cout << endl << endl;
    cout << "Geef het aantal te schuiven plaatsen (max " << lengte << " plaatsen)\n\n"; //invoer tekst
    cout << "\t\t-> "; //invoer positie
    cin >> waarde; cin.get(); //lees schuifwaarde in en gooi de enter uit de invoerbuffer
    
    //substring van laatste deel + substring van eerste deel
    string nieuw = tekst.substr(waarde, lengte-1) + tekst.substr(0, waarde);
    
    cout << nieuw << endl; //laat de verschoven waarde op het scherm zien
    cout << "Press any key to quit...";
    cin.get();
    return 0;
}

--Johan
 
He, bedankt,

Alleen jammer dat ik niets van C++ weet, dus ik kan niet alle gebruikte commando's in C++ omzetten naar C :(
maar ik ben weer wat verder, maar ik weet helaas nog steeds niet hoe ik het karakter dat ik aan de ene kant eruit geschoven heb er aan de andere kant van de string er weer in krijg.
Dit is wat ik tot nu toe werkend gekregen heb:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/*functie voor het bepalen van de lengte van een string.*/
unsigned strlen(const char *s)
{
register int n;

for(n=0;*s!='\0';++s)
++n;
return n;
}


int main(int argc, char *argv[])
{
char tekst[25]; //string invoer tekst
char copy[25]; //string
char *p, *l; //pointer p
int waarde, //invoer schuifwaarde
lengte, //maximaal aantal te schuiven karakter plaatsen
aantal,
a=0,b,c;
printf("Geef een string in, tot max 6 karakters.\n\n"); //invoer tekst
printf("\t\t->"); //invoer positie
scanf("%s",tekst); //lees string waarde in
printf("\n\n"); //sla een regel over
printf("De ingevoerde tekst string is :\t%s\n\n\n",tekst); //ingevoerde text in string

lengte = strlen(tekst); //bepalen max aantal te schuiven plaatsen

printf("Geef het aantal te schuiven plaatsen max %d plaatsen)\n\n", lengte); //invoer tekst
printf("\t\t->"); //invoer positie
scanf("%d", &waarde); //lees schuifwaarde in

p=tekst+waarde; //berekening voor het beginpunt voor het schuiven karakters in de string

printf("%s", p); //laat de verschoven waarde op het scherm zien
printf("\n\n"); //sla een regel over

strcpy(copy,tekst); //copieer de waarde van string tekst naar string copy
printf("waarde orrigineel : %s", copy); //laat waarde van string copy op het scherm zien
printf("\n\n");

printf("weggevallen karakters\n");
for(a=0; a=5 ; ++a)//a==(waarde-1)
{
printf("%c",copy[a]);
printf("%d", a);
}
printf("\n\n\n");
system("PAUSE");
return 0;
}
 
Hallo,

Ik denk dat je het beste eerst het laatste karakter naar het de eerste positie kunt verschuiven. Dus voordat je alles plek doorschuift zoiets:

Code:
array1[0] = array2[strlen(array2 - 1)];

gr Niek
 
Als ik dat laatste karakter naar het begin schuif dan verwijder je het eerste karakter wat daar voorheen stond
Als ik bijvoorbeeld abcdef in de string had staat en ik voer dat commando uit komt er fbcdef in de string te staan en ben ik mijn a karakter kwijt.
Maar hoe moet ik dan die overige karakters zien te verschuiven ? ik zie nu even niet hoe ik dat 123 voor elkaar moet krijgen :( :( :(
 
ziehier een werkende code:

Code:
#include <stdio.h>
#include <string.h>


int main()
{
char acstring[4] = {'h','o','i', '\0'};
char ackopie[4];
unsigned int iTeller;

ackopie[0] = acstring[strlen(acstring)- 1];

for (iTeller = 1; iTeller < strlen(acstring); iTeller++)
{
     ackopie[iTeller] = acstring[iTeller -1];

}
ackopie[strlen(acstring)] = '\0';
printf("%s", ackopie);
getchar();
getchar();
return 0;
}
Veel plezier ermee:thumb:

gr Niek
 
He Niek,

Beetje laat, maar heb het veel te druk gehad verder met school om te reageren, maar dit was net even het duwtje wat ik nodig had :thumb: :thumb:
Het programma werkt, zowel linksom als rechtsom en alles is variabel in te voeren, dus probleem is opgelost:D :D
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan