第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;
}