[英]How to use strtok to delimit and get new strings
我正在嘗試使用strtok分解字符串並將提取的字符串存儲到新數組中,以便可以將它們分別用作命令或其他內容。
#include <stdio.h>
#include <string.h>
main()
{
char test_string[50]="string to split up";
char *sub_string;
/* Extract first string */
printf("%s\n", strtok(test_string, " "));
/* Extract remaining strings */
while ( (sub_string=strtok(NULL, " ")) != NULL)
{
printf("%s\n", sub_string);
}
}
這樣會打印出我要查找的字符串,不帶空格,但是我將如何將每個單詞保存到單獨的字符串變量中,而不僅僅是打印它們? 基本上,我希望將“字符串”保存到string1 []中,將“ to”保存到string2 []中,依此類推。
原始字符串被strtok
操作“切成碎片”,因此您實際上可以執行以下操作:
#include <stdio.h>
#include <string.h>
int main(void)
{
char test_string[50]="string to split up";
char *sub_string[50];
int ii = -1;
/* Extract first string */
sub_string[++ii]=strtok(test_string, " "));
printf("%s\n", sub_string[0]);
/* Extract remaining strings */
while ( (sub_string[++ii]=strtok(NULL, " ")) != NULL)
{
printf("%s\n", sub_string[ii]);
}
}
基本上, strtok
在找到的定界符處插入'\\0'
,並返回指向令牌開頭的指針。 因此,您實際上不需要將新的內存分配給sub_string
元素-只需分配給數組即可。 我將數組的元素數設置為50; 實際上,您將需要確保while
循環在空間不足之前停止運行……
一張小圖可能會有所幫助:
原始字串:
s t r i n g t o s p l i t u p \0
在第一次調用strtok
:
s t r i n g \0 t o s p l i t u p \0
^ first pointer
下次通話后:
s t r i n g \0 t o \0 s p l i t u p \0
^ second pointer
第三次通話后:
s t r i n g \0 t o \0 s p l i t \0 u p \0
^ third pointer
等等
如果您想將子字符串存儲在“不同變量”中(不知道為什么您不認為sub_string[0]
和sub_string[1]
等是方便的“不同變量”,但我會再留sub_string[1]
),您可以將以上內容更改為:
#include <stdio.h>
#include <string.h>
int main(void)
{
char test_string[50]="string to split up";
char *string1, *string2, *string3, *string4, *string5;
int n = 0;
/* Extract first string */
if(strlen(test_string)==0) return 0;
string1=strtok(test_string, " "));
n++;
printf("%s\n", string1);
while( n < 5 ) {
string2 = strtok(NULL, " ");
if (string2 == NULL) break; else n++;
string3 = strtok(NULL, " ");
if (string3 == NULL) break; else n++;
string4 = strtok(NULL, " ");
if (string4 == NULL) break; else n++;
string5 = strtok(NULL, " ");
if (string4 == NULL) break; else n++;
}
printf("the total number of strings found is %d\n", n);
}
我只是覺得這不像使用char *
數組那樣優雅。 你明白我的意思嗎?
#include <stdio.h>
#include <string.h>
main()
{
char test_string[50]="string to split up";
char *sub_string;
char withoutspace[50];
/* Extract first string */
printf("%s\n", strtok(test_string, " "));
/* Extract remaining strings */
while ( (sub_string=strtok(NULL, " ")) != NULL)
{
strcat(withoutspace, sub_string); //printf("%s\n", sub_string);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.