我在C上很穷,我只是在学它。我有一根绳子,像:
a 322 4.1 5.2(带空格/制表符/空格)
或
b 1.22 4.1 5.2 4.11没有空格的所有字符串的获取方法是什么?
string[0]="s";
string[1]="322";
string[2]="4.1";等等。
编辑
我只是想找到最好的或最快的方法来做,大行号码。(70-100.000字符串)
致力于Android/galaxy s/linkedlist
测试:使用C++(没有字符串/std),71.000数组花费了7-8秒,java花费了14秒。
发布于 2011-12-05 18:22:11
最初的海报用sscanf()问了什么
#include <stdio.h>
#include <string.h>
int main(){
// 5 elements, each of 32 bytes, 31 for characters the 32nd for storing \0
char string[5][32];
char* inputString="a 322 4.1 5.2";
memset(string,0,sizeof(string));//to initialize to NULL, always be safe on C
sscanf(inputString,"%s%s%s%s",string[0],string[1],string[2],string[3]);
printf("res0= %s\n",string[0]);
printf("res1= %s\n",string[1]);
printf("res2= %s\n",string[2]);
printf("res2= %s\n",string[3]);
return 0;
}这将打印:
res0= a
res1= 322
res2= 4.1
res2= 5.2发布于 2011-12-05 16:48:13
正如Martin所说,您可以使用strtok,这是推荐的可移植性。但是,如果您的系统有可用的strsep,我将使用它。它的手册页上的BSD有解决您的问题在示例部分。
#include <string.h>
int main()
{
char input[] = " a 322 4.1 5.2";
char **ap, *argv[5], *inputstring = input;
for (ap = argv; (*ap = strsep(&inputstring, " \t")) != NULL;)
if (**ap != '\0')
if (++ap >= &argv[10])
break;
/* degubber output for `p argv':
*
* $1 = {
* 0x1001009a1 "a",
* 0x1001009ac "322",
* 0x1001009b1 "4.1",
* 0x1001009b7 "5.2",
* 0x0
* }
*/
}发布于 2011-12-05 17:11:39
拆分字符串的最安全方法(特别是如果您不知道字符串可能包含什么)是斯特托克。
您还可能需要检查如何在“C”中创建string[]数组
https://stackoverflow.com/questions/8388695
复制相似问题