要求编写的格式如下: int makearg(char s[], char **args[]) { (要求完成这个函数的编写) } main() { char **args, str[] = "ls -l file"; int argc; argc = makearg(str, &args); (最后输出: ls -I file 2 }
分割字符串,意思是字符串中有很多空格,每个空格对应一个子串吗?
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
代码如下,如有帮助,请采纳一下,谢谢。
#include <stdio.h>
#include <string>
using namespace std;
int makearg(char s[], char** args[])
{
string pStr = s;
int nStartPos=0;
int nEndPos=0;
*args = new char*[10];
int times = 0;
while((nEndPos = pStr.find(' ',nStartPos))> 0)
{
string tmp = pStr.substr(nStartPos,nEndPos - nStartPos);
char* p = new char[tmp.length()+1];
memset(p,0,tmp.length() + 1);
memcpy(p,tmp.c_str(),tmp.length());
nStartPos = nEndPos+1;
(*args)[times] = p;
times++;
}
nEndPos=pStr.find('\0',0);
string tmp = pStr.substr(nStartPos,nEndPos-nStartPos);
char* p = new char[tmp.length()+1];
memset(p,0,tmp.length() + 1);
memcpy(p,tmp.c_str(),tmp.length());
nStartPos = nEndPos+1;
(*args)[times] = p;
return times;
}
int main()
{
char **args;
char str[] = "ls -l file";
int argc;
argc = makearg(str, &args);
for (int i =0; i <= argc;i++)
{
printf("%s\n",args[i]);
}
printf("%d\n",argc);
//释放空间
for (int i = 0; i <=argc; i++)
{
delete[] args[i];
args[i] = 0;
}
delete[] args;
args = 0;
getchar();
getchar();
return 0;
}