【发布时间】:2013-02-16 17:11:52
【问题描述】:
所以,我正在尝试编写一个返回vector<char**> 的函数,例如:
vector<char**> test(string mystr) {
char*temp=new char[mystr.size()+1];
strcpy(temp,mystr.c_str());
char*subStr=strtok(temp,":");
while(subStr!=NULL) {
int i=0;
char**args=new char*[200];
char*tempsta=newchar[strlen(subStr)+1];
strcpy(tempsta, subStr);
args[i]=strtok(tempsta," ");
while(args[i]!=NULL) {
i++;
args[i]=strtok(NULL," ");
}
fullVec.push_back(args);
//cout<<subStr<<endl;
subStr=strtok(NULL,":");
}
return fullVec;
}
所以我想将split 参数字符串与":" 分隔符,然后与“”分隔符。在cout<<subStr 调用中,如果我注释掉从int i=0 到fullVec.push_back(args) 的所有内容,我会得到预期结果。如果我不注释掉所有这些行,我只会得到第一个 substring(直到遇到第一个“:”),然后最大的 while 循环退出。
我的意思是预期的;让我们假设参数是“我的名字是:bon jovi:xxx ab” 如果所有内容都被注释掉,将打印以下行:
my name is
bon jovi
xxx ab
如果我保持原样,将会发生的只是
my name is
将打印,大循环将退出
感谢任何帮助,谢谢! (是的,我知道这似乎是一个愚蠢的练习,可以更优雅/更轻松地完成......但是我希望在使用字符串等娱乐之前让这个解决方案起作用。)
【问题讨论】:
-
混合使用 C 和 C++ 会产生令人讨厌的坏代码
-
你没有释放你的
newd 内存任何... -
只要是写C++代码,就尽量避免写C风格的代码。如果您没有充分的理由使用
char*,那么请改用std::string。 -
-nneonneo你是对的,只是想在继续之前弄清楚这个问题--LiHo,我理解你的意思,但是我将无法一直使用常规方法学习试图“探索”
-
@DaxDurax:你想学就够了。但是你应该分别学习 C 和 C++。它们是两种不同的语言。像这样混合它们只会导致混淆难以阅读的代码。我将重写为 C 解决方案和不同的 C++ 解决方案。因为这两种技术完全不同。