这是我的代码
int main(int argc, char *argv[]) {
char const *strings[10] = {"dhh", "aci", "cdh"};
join_def(strings, 'l');
return EXIT_SUCCESS;
}
// part 1 read lines
void join_def(char const **strings, char delim) {
char *t = new char[100];
//int length = 0;
t[0] = '\0';
int x = sizeof(strings);
std::cout << delim << std::endl;
for (int i = 0; i < x; i++) {
int size = 0;
while(strings[i][size]!='\0'){
size++;
std::cout << strings[i][size] << std::endl;
}
}
}
我已经花了几个小时了,但我无法将它连接起来 对于此任务,我无法使用 cstring 或 iostream 以外的任何东西,因此请不要建议。
输出需要是一个c字符串=“dhhlacilcdh”
最佳答案
首先,您无法确定传递给函数的数组中的元素数量,因为该数组将衰减为简单的指针。所以,你的sizeof(strings)
表达式将(在编译时)计算为指针的(固定)大小(以字节为单位)。为了让函数“知道”数组中有多少个元素,需要明确告知它(通过额外的参数)。
其次,您有 i
' 和 size
std::cout << strings[i][size] << std::endl;
中的索引方向错误行,并且进一步增加 size
在打印相关字符之前,而在打印之后应该递增。
下面的代码还执行字符串的实际连接,以及修改后的 join_def
函数现在返回一个指向该结果的指针(当您完成它时必须释放它);
#include <iostream>
char* join_def(char const** strings, char delim, int x)
{
char* t = new char[100];
int length = 0;
t[0] = '\0';
//int x = sizeof(strings);
std::cout << delim << std::endl;
for (int i = 0; i < x; i++) {
int size = 0;
while (strings[i][size] != '\0') {
std::cout << strings[i][size] << std::endl;
t[length++] = strings[i][size]; // Append this character
size++;
}
t[length++] = delim; // Append delimiter
}
t[length] = '\0'; // Append nul-terminator
return t;
}
int main()
{
char const* strings[10] = { "dhh", "aci", "cdh" };
char* result = join_def(strings, 'l', 3);
std::cout << result << std::endl;
free(result);
return 0;
}
另请注意,我已移动 join_def
main
之前的功能代码(这就是所谓的)。如果您不这样做,那么至少必须在 main 之前提供该函数的(前向)声明(只需 char* join_def(char const** strings, char delim, int x);
本身即可)。
请随时要求进一步澄清和/或解释。
关于c++ - 尝试用分隔符连接 C 字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62530959/