c - 如何在不使用指针的情况下将字符串分成两半

标签 c arrays string

我想输入一个字符串,它总是包含偶数个字母。我希望它打印出字符串,但分成两半并在中间用“-”连接。我设法打印出单词的前半部分,但不是最后一个。

我已经尝试制作一个 for 循环,该循环从 user_input 的中间开始,并且应该将每个字母放入字符串“right”中。

int main() {

    char user_input[STRING_LENGTH] = { 0 };
    char left[STRING_LENGTH];
    char right[STRING_LENGTH];

    int lenght, mid, i;

    printf("Please type in a string: ");

    fgets(user_input, STRING_LENGTH, stdin);
    user_input[strlen(user_input) - 1] = 0;

    lenght = strlen(user_input);
    mid = lenght/2;
    for (i = 0; i < mid; ++i) {
        left[i] = user_input[i];
    }

    for (i = lenght; i < mid; --i) {
        right[i] = user_input[i];
    }
}

如果输入是“airplane”,预期结果将是“airp - lane”。

最佳答案

考虑这部分:

for (i = lenght; i < mid; --i) {
    right[i] = user_input[i];
}

right[0] 的内容在这种情况下是什么?您正在复制字符串的正确部分,但复制到了错误的位置。试试这个:

for (i = mid; i < lenght; i++) {
    right[i-mid] = user_input[i];
}

此外,您应该以 null 终止这些数组。总而言之,它应该是这样的:

for (i = 0; i < mid; ++i) {
    left[i] = user_input[i];
}
left[mid] = '\0';
for (i = mid; i < lenght; i++) {
    right[i-mid] = user_input[i];
}
right[i-mid] = '\0';
printf("%s-%s", left, right);

关于c - 如何在不使用指针的情况下将字符串分成两半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58415293/

相关文章:

c++ - 结构成员对齐 - 是否可以假设没有填充

php - Redis(键/值数据库)和关联数组之间的区别?

ruby-on-rails - Rails 3 和 Gettext (fast_gettext) 非常奇怪,String 的未定义方法 'add'

java - 在比较 a[j]=42 时,我收到消息 "cannot from convert int to boolean"

c - C中递归的双向链表插入

c: 返回目录中的所有文件名

c - 多线程和 CPU 缓存

java - 如何用 ASCII 初始化 nxn 维度上的位置? (java)

php - 在 PHP 数组中查找出现次数最多的数字

java - 从单词列表中查找字符串,其中包含字符串中的某些字符