提取argv[ ]中的数

命令行输入 ./test (1,2,3,5,6)
test为可执行程序
现在我想要获得1 2 3 5 6这些数,把他放在一个数组里 怎么办
把(1,2,3,4,5,6)字符串中的数字提取出来,最好能用c++语言。

命令行下参数是以空格之类的分割符分的, 所以你最好用
./test 1 2 3 5 6这种格式
如果像你那样写的话
argv[0] = "./test"
argv[1]= "(1,2,3,4,5,6)"
如果你在每个逗号之间有空格的话就是:
argv[0]="./test"
argv[1]="(1,"
argv[2]="2,"
.
.
argv[5]="6)"

我想楼主应该知道怎么把它放到数组里了吧
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-21
./test 1 2 3 5 6
这样才对吧?这样调用,这些字符串本来就在一个数组中呀!
argv[1] = “1”
argv[2] = “2”
argv[3] = “3”
argv[4] = “4”
argv[5] = “5”

如果按照你的写法: ./test (1,2,3,5,6)
argv[1] = “(1,2,3,5,6)”追问

我的意思是把”(1,2,3,4)“字符串里的1234提取出来

追答

int slen = strlen(argv[1]);
char* string = (char*)malloc(slen);
slen=0;
while(*argv[1]!='\0')
{
if(*argv[1]==41 || *argv[1]==40)
{
continue;
}
else
{
string[slen] = *argv[1];
slen++;
}
argv[1]++;
}
string[slen]='\0';
char except[] = ",";
char *ptoken = NULL;
ptoken = strtok(string,except);
while(NULL!=ptoken)
{
printf("%s\n",ptoken);
ptoken = strtok(NULL,except);
}

你试一下,我这没环境。。。

本回答被网友采纳
第2个回答  2012-04-21
#include <stdio.h>
#include <string.h>
#include <assert.h>
int main(int argc,char* argv[])
{
int i=0;
int a[10]={0};
char *s1;
assert(argc>1);
s1= strtok(argv[1]+1,",");
while (s1) //读取括号中用逗号分隔的整数,保存到a数组中。
{
sscanf(s1,"%d",&a[i++]);
s1=strtok(NULL,",)");
}

while (--i>=0) //输出读取到的整数
printf("%d\n",a[i]);
return 0;
}
第3个回答  2012-04-21
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(int argc,char *argv[])
{
if(argc<2||argc>2)
printf("参数不匹配%d\n",argc);
else
{
int a[50];
int i=0,k=0,l;
l=strlen(argv[1]);
while(i<l)
{
if(!isdigit(argv[1][i]))
i++;
sscanf(&argv[1][i],"%d",&a[k++]);
for(;isdigit(argv[1][i]);i++)
;
if(!isdigit(argv[1][i]))
i++;
}
for(i=0;i<k;i++)
printf("%d\n",a[i]);
}
return 0;
}
输入时不支持中文的逗号和括号
第4个回答  2012-04-21
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
int i;
int* ia;
if(argc>1)
{
ia=(int*)malloc((argc-1)*sizeof(int));
}
for(i=0;i<argc-1;i++)
{
ia[i]=atoi(argv[i+1]);
}
for(i=0;i<argc-1;i++)
printf("%d ",ia[i]);
free(ia);
return 0;
}
参数用空格分隔
下面是c++语法的
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc,char* argv[])
{
int i;
int* ia;
if(argc>1)
{
ia=new int[argc-1];
}
for(i=0;i<argc-1;i++)
{
ia[i]=atoi(argv[i+1]);
}
for(i=0;i<argc-1;i++)
cout<<ia[i]<<" ";
delete[] ia;
return 0;
}
相似回答