c++ - 尝试用分隔符连接 C 字符串数组

标签 c++ c++11

这是我的代码

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/

相关文章:

c++ - 为什么 lambda 的调用运算符隐式为 const?

c++ - 如何在 C/C++ 中(取消)转义字符串?

c++ - 如何将 vtkDoubleArray 转换为 Eigen::matrix

c++ - STL 的依赖范围错误

c++ - 如何改进视频流中的形状检测

c++ - STL 有序容器如何知道它们的结束?

带百分比的 C++ 数学

c++ - 操作原始内存的正确数据类型

c++ - 在 _USE_32BIT_TIME_T 上使用 C++11 的计时

c++ - 在 c++11 中复制常量大小数组的最简洁方法