webForumDet fria alternativet

Splita en sträng

C/C++

9 svar · 388 visningar · startad av msossna

Medlem sedan feb. 2002476 inlägg
Frågan#1

Jag har en sträng som ser ut: int,int,int, (ex 12,23,24,). Nuvill jag dela denna så att talen hamnar för sig. Någon som har ett bra sätt att göra detta?

Medlem sedan mars 20007 896 inlägg
#2

Typ:

#include <string.h>
...
char MinaInts[] = "12,23,24";
char* Tokens;

Tokens = strtok( MinaInts, "," );
while( Tokens != NULL ) {
     printf( "Int: %s\n", Tokens );
     Tokens = strtok( NULL, "," );
}
...
Medlem sedan feb. 2002476 inlägg
#3

Om jag nu vill ha in varje tal i en array?

Medlem sedan mars 20007 896 inlägg
#4

Hmm... Kanske skulle följande kunna fungera:

#include <string.h>
#include <stdlib.h>
...
char MinaInts[] = "12,23,24";
char* Tokens;
int numbers[3];
int counter = 0;

Tokens = strtok( MinaInts, "," );
while( Tokens != NULL ) {
     numbers[ counter++ ] = atoi( Tokens );
     Tokens = strtok( NULL, "," );
}
...

Viktigt nu att du alltid endast har 3 stycken integers i din sträng, samt att du endast har två stycken komman som separerar siffrorna mellan. Inga blanksteg eller övriga tecken förutom 0-9 kommer att fungera för dig.

Medlem sedan juni 20008 205 inlägg
#5

Du har glömmit en liten kodsnutt där, SPiN...

Tokens = strtok( MinaInts, "," );
while( Tokens != NULL ) {
     numbers[ counter++ ] = atoi( Tokens );
     [i]Tokens = strtok(NULL, ",");[/i]
}

blir en liten fin evighetsloop annars :)

Medlem sedan feb. 2002476 inlägg
#6

Det stora problemet nu är att min sträng är av typen const char*

Medlem sedan mars 20007 896 inlägg
#7

spango, bra att du har ögonen med dig! :D

msossna, förstår inte problemet? :q

Medlem sedan feb. 2002476 inlägg
#8

strtok måste ta en char* som första argument, men mina ints ligger i en const char*, således måse jag konvertera const char* till char*

Medlem sedan juni 200010 432 inlägg
#9

Det som är const char är "12,23,24", så det är inte så konstigt om du får felmeddelande. Ge arrayen en fast storlek och tilldela genom strcpy(MinaInts,"...") så blir det säkert annorlunda.

char MinaInts[255];
strcpy(MinaInts,"12,23,24");

Alternativt deklarera MinaInts som en pekare och allokera minnet dynamiskt.

Medlem sedan juni 20008 205 inlägg
#10

Lalala. Ignorera.

251 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)