strtok 是如何工作的?
How strtok works?
#include <stdio.h>
#include<string.h>
int main() {
char a[]="hey -* there -* minecraft-; jukebox! ";
char *p=strtok(a,"-");
//printf("%s",a); --line-id(00)
while(p!= NULL)
{
printf("%s",p); //line-id(01)
p=strtok(NULL,"-");
}
printf("\n");
p=strtok(a,"*");
while(p!=NULL)
{
printf("%s",p);
p=strtok(NULL,"*");
}
return 0;
}
输出:
hey * there * Minecraft; jukebox!
hey
但是我需要的输出是:
hey * there * Minecraft; jukebox!
hey there Minecraft jukebox!
Q) 为什么我不能将 line-id(01) 更改为 print("%s",*p)
因为 p 是一个指针我们应该使用 *p 来获取值,p 指向右边..?我遇到分段错误。
Q) 如果我使用 print("%s",a) 我会在 line-id(00) 中得到 hey 作为输出;为什么?
Q) 如果可能请解释一下在strtok()中使用的指针p。 strtok 是如何工作的?
strtok()
修改输入字符串。先复制它。 strdup()
是你的朋友。
如果你的编译器抱怨它找不到 strdup()
copy/paste this in.
char *strdup(const char *s)
{
size_t len = strlen(s) + 1;
char *t = malloc(len);
if (!t) return NULL;
memcpy(t, s, len);
return t;
}
从 char 数组中删除定界符的另一种方法是用后续字符覆盖定界符,从而缩小数组。
#include <stdio.h>
#include<string.h>
int main() {
char a[]="hey -* there -* minecraft-; jukebox! ";
char delimeters[] = "-*;";
char *to = a;
char *from = a;
for ( int each = 0; each < 3; ++each) {//loop through delimiters
to = a;
from = a;
while ( *from) {//not at terminating zero
while ( *from == delimeters[each]) {
++from;//advance pointer past delimiter
}
*to = *from;//assign character, overwriting as needed
++to;
++from;
}
*to = 0;//terminate
printf ( "%s\n", a);
}
return 0;
}
输出
hey * there * minecraft; jukebox!
hey there minecraft; jukebox!
hey there minecraft jukebox!
#include <stdio.h>
#include<string.h>
int main() {
char a[]="hey -* there -* minecraft-; jukebox! ";
char *p=strtok(a,"-");
//printf("%s",a); --line-id(00)
while(p!= NULL)
{
printf("%s",p); //line-id(01)
p=strtok(NULL,"-");
}
printf("\n");
p=strtok(a,"*");
while(p!=NULL)
{
printf("%s",p);
p=strtok(NULL,"*");
}
return 0;
}
输出:
hey * there * Minecraft; jukebox!
hey
但是我需要的输出是:
hey * there * Minecraft; jukebox!
hey there Minecraft jukebox!
Q) 为什么我不能将 line-id(01) 更改为 print("%s",*p)
因为 p 是一个指针我们应该使用 *p 来获取值,p 指向右边..?我遇到分段错误。
Q) 如果我使用 print("%s",a) 我会在 line-id(00) 中得到 hey 作为输出;为什么?
Q) 如果可能请解释一下在strtok()中使用的指针p。 strtok 是如何工作的?
strtok()
修改输入字符串。先复制它。 strdup()
是你的朋友。
如果你的编译器抱怨它找不到 strdup()
copy/paste this in.
char *strdup(const char *s)
{
size_t len = strlen(s) + 1;
char *t = malloc(len);
if (!t) return NULL;
memcpy(t, s, len);
return t;
}
从 char 数组中删除定界符的另一种方法是用后续字符覆盖定界符,从而缩小数组。
#include <stdio.h>
#include<string.h>
int main() {
char a[]="hey -* there -* minecraft-; jukebox! ";
char delimeters[] = "-*;";
char *to = a;
char *from = a;
for ( int each = 0; each < 3; ++each) {//loop through delimiters
to = a;
from = a;
while ( *from) {//not at terminating zero
while ( *from == delimeters[each]) {
++from;//advance pointer past delimiter
}
*to = *from;//assign character, overwriting as needed
++to;
++from;
}
*to = 0;//terminate
printf ( "%s\n", a);
}
return 0;
}
输出
hey * there * minecraft; jukebox!
hey there minecraft; jukebox!
hey there minecraft jukebox!