我理解如何使用字符串类型数组来查找大小:
char * shuffleStrings(string theStrings[])
{
int sz = 0;
while(!theStrings[sz].empty())
{
sz++;
}
sz--;
printf("sz is %d\n", sz);
char * shuffled = new char[sz];
return shuffled;
}
上面例子中的一个问题也是,为什么我必须将大小减小1才能找到数组中元素的真实数量? 所以如果代码看起来像这样:
char * shuffleStrings(char * theStrings[])
{
//how can I find the size??
//I tried this and got a weird continuous block of printing
int i = 0;
while(!theStrings)
{
theStrings++;
i++;
}
printf("sz is %d\n", i);
char * shuffled = new char[i];
return shuffled;
}
答案 0 :(得分:0)
你不应该减少计数器以获得真正的大小,在第一个片段中。如果你有两个元素和一个空元素,循环将以值结束,这是正确的。
在第二个片段中,您处理指向指针的指针。所以while条件应该是*theStrings
(假设NULL指针是表格末尾的标记。
请注意,在这两种情况下,如果表格不能保存表格末尾的标记,则可能会超出范围。为什么不使用 vector<string>
?然后你可以在没有任何循环的情况下获得大小,并且不会有超出界限的风险
答案 1 :(得分:0)
你在这里看到的是&#34;终止&#34;字符串中的字符或'\0'
使用char *数组而不是字符串时,可以更好地看到这一点。
以下是我制作的尺寸计算器示例。
int getSize(const char* s)
{
unsigned int i = 0;
char x = ' ';
while ((x = s[i++]) != '\0');
return i - 1;
}
如您所见,char*
以'\0'
字符终止,表示字符串结束。这是您在算法中计算的字符,这就是您获得额外字符的原因。
关于你的第二个问题,似乎想创建一个大小为所有字符串的新数组。
为此,您可以计算每个字符串的长度,然后将它们一起添加以创建一个新数组。