我在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
测试:71.000阵列用C ++(没有字符串/ std)花了大约7-8秒,用java花了14秒
答案 0 :(得分:2)
原始海报使用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
答案 1 :(得分:1)
正如Martin Beckett所说,您可以使用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
* }
*/
}
答案 2 :(得分:0)
分割字符串的最安全方法(特别是如果你不知道字符串可能包含的内容)是strtok。
您可能还需要检查如何在'C'
中创建string []数组答案 3 :(得分:0)
for(int i=0,j=0; str[i]; i++)
{
if(str[i]==' ')
continue;
str2[j]=str[i];
j++;
}
在上面的代码中,str
是您之前的字符串,str1
是新字符串。