我想在 C 中将一个字符串分成两个字符串
I want to split a string into two strings in C
我想用逗号分割一个字符串,并将字符串中的第一个数字分隔成它自己的新字符串,我想将字符串的其余部分放在一起。
到目前为止,我已经通过使用 strtok()
进行了尝试,我可以将第一个数字放入它自己的字符串中,但现在我不知道如何将字符串的其余部分保持在一起。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char testStr[] = "1000,first,second,third,+abc";
char *uidStr;
char *restOfstr;
int n;
//This is wrong, I know, but I want to populate
//the rest of the string after the first comma
//into a single string without the UID.
uidStr = strtok(testStr, ",");
while (n < 5)
{
restOfstr = strtok(NULL, ",");
n++;
}
return 0;
}
#include <string.h>
#include <stdio.h>
int main(int ac, char **av) {
while (--ac) {
char *p = *++av;
char *t = strtok(p, ",");
char *r = strtok(NULL,"");
printf("%s : %s\n", t, r);
}
return 0;
}
请注意,传递给第二个 strtok 的空字符串 "" 意味着它找不到分隔符,因此 returns 字符串的其余部分。
您可以使用 strchr
查找字符串中的第一个逗号。
然后使用strncpy
得到字符串中的数字。
完整代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char *str = "1000,first,second,third,+abc";
char *s = strchr(str, ',');
if(!s)
return -1;
char num[10];
strncpy(num, str, s-str);
num[s-str] = '[=10=]';
int a = strtol(num, NULL, 10);
printf("num = %d\nthe remaining: %s\n", a, s+1);
return 0;
}
strtok
工作正常,你必须记住它 returns 一个指向每个标记化单词的指针,所以你需要两个指针,一个用于第一个标记,另一个用于字符串的其余部分.
#include <stdio.h>
#include <string.h>
int main()
{
char testStr[] = "1000,first,second,third,+abc";
char *uidStr; //pointer to uid
char *restOfstr; //pointers to the rest of the string
uidStr = strtok(testStr, ","); //uid remains in testStr
restOfstr = strtok(NULL, "\n"); //rest of the string
puts(uidStr); //or puts(testStr) to print uid
puts(restOfstr); //print rest of the string
return 0;
}
如果你想要更安全的功能,你可以使用strtok_s
。
除了@mevets 和@anastaciu 提供的出色答案(我愿意接受这些)之外,这段代码也可以正常工作。
#include <string.h>
#include <stdio.h>
int main(int argc, char** argv) {
char _p[] = "1000,Hey,There";
char* str1 = strtok(_p, ",");
char* str2 = strtok(NULL, "");
return 0;
}
我想用逗号分割一个字符串,并将字符串中的第一个数字分隔成它自己的新字符串,我想将字符串的其余部分放在一起。
到目前为止,我已经通过使用 strtok()
进行了尝试,我可以将第一个数字放入它自己的字符串中,但现在我不知道如何将字符串的其余部分保持在一起。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char testStr[] = "1000,first,second,third,+abc";
char *uidStr;
char *restOfstr;
int n;
//This is wrong, I know, but I want to populate
//the rest of the string after the first comma
//into a single string without the UID.
uidStr = strtok(testStr, ",");
while (n < 5)
{
restOfstr = strtok(NULL, ",");
n++;
}
return 0;
}
#include <string.h>
#include <stdio.h>
int main(int ac, char **av) {
while (--ac) {
char *p = *++av;
char *t = strtok(p, ",");
char *r = strtok(NULL,"");
printf("%s : %s\n", t, r);
}
return 0;
}
请注意,传递给第二个 strtok 的空字符串 "" 意味着它找不到分隔符,因此 returns 字符串的其余部分。
您可以使用 strchr
查找字符串中的第一个逗号。
然后使用strncpy
得到字符串中的数字。
完整代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char *str = "1000,first,second,third,+abc";
char *s = strchr(str, ',');
if(!s)
return -1;
char num[10];
strncpy(num, str, s-str);
num[s-str] = '[=10=]';
int a = strtol(num, NULL, 10);
printf("num = %d\nthe remaining: %s\n", a, s+1);
return 0;
}
strtok
工作正常,你必须记住它 returns 一个指向每个标记化单词的指针,所以你需要两个指针,一个用于第一个标记,另一个用于字符串的其余部分.
#include <stdio.h>
#include <string.h>
int main()
{
char testStr[] = "1000,first,second,third,+abc";
char *uidStr; //pointer to uid
char *restOfstr; //pointers to the rest of the string
uidStr = strtok(testStr, ","); //uid remains in testStr
restOfstr = strtok(NULL, "\n"); //rest of the string
puts(uidStr); //or puts(testStr) to print uid
puts(restOfstr); //print rest of the string
return 0;
}
如果你想要更安全的功能,你可以使用strtok_s
。
除了@mevets 和@anastaciu 提供的出色答案(我愿意接受这些)之外,这段代码也可以正常工作。
#include <string.h>
#include <stdio.h>
int main(int argc, char** argv) {
char _p[] = "1000,Hey,There";
char* str1 = strtok(_p, ",");
char* str2 = strtok(NULL, "");
return 0;
}