如何复制字符串中的字母?

问题描述 投票:1回答:4

我想编写一个程序,在其中复制给定字符串中的每个字母。

例如,如果输入为abc,则输出为aabbcc

我该怎么做?

到目前为止是我的代码。它只复制字符串:

#include <stdio.h>

int main () {
    char str_in[100];
    char str_out[200] = "";
    int i;

    printf("Enter a word: ");
    scanf("%s", str_in);

    for (i = 0; i < sizeof(str_in); i++) {
        str_out[i] += str_in[i];
    }

    printf("Duplicated word: %s", str_out);

    return 0;
}
c loops for-loop c-strings
4个回答
0
投票

对于初学者,目标字符数组至少应比源数组大两倍。

执行复制的循环可以如下所示

size_t j = 0;
for ( size_t i = 0; str_in[i] != '\0'; i++ ) 
{
    str_out[j++] = str_in[i];
    str_out[j++] = str_in[i];
}

str_out[j] = '\0';

0
投票

这是您想要做的一种方法-因为您知道要访问的str_out中的两个索引对应于i的第i+1str_in个位置:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define SIZE    100


int main(void)
{
    char str_in[SIZE];
    char str_out[SIZE*2];
    int i, len;

    printf("Enter a word: ");
    scanf("%s", str_in);
    len = strlen(str_in);

    for (i = 0; i < len; i++) {
        str_out[i*2] = str_in[i];
        str_out[i*2+1] = str_in[i];
    }
    str_out[i*2] = '\0';

    printf("Duplicated word: %s\n", str_out);

    return EXIT_SUCCESS;
}

您也可以使用另一个变量并像这样在循环内更新:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define SIZE    100


int main(void)
{
    char str_in[SIZE];
    char str_out[SIZE*2];
    int i, j, len;

    printf("Enter a word: ");
    scanf("%s", str_in);
    len = strlen(str_in);

    for (i = 0, j = 0; i < len; i++, j += 2) {
        str_out[j] = str_in[i];
        str_out[j+1] = str_in[i];
    }
    str_out[j] = '\0';

    printf("Duplicated word: %s\n", str_out);

    return EXIT_SUCCESS;
}

作为旁注,最好是#define您的常量,而不要在代码中包含它们。


0
投票

我建议仅分配所需的内存量:

char *str_out = malloc(strlen(str_in) + 1);

然后使用另一个每次计数为2的循环变量,因此循环中每个字符的空间是2倍。

如果这样做,还应将+ 1放在新循环变量旁边,以将其复制到字符串的当前和下一个元素,从而复制字符。

我也建议您将size_t用于循环变量以匹配str_len的返回值。

我在这里实现了我的建议:

size_t str_ctr;
size_t str_ctrx2;
size_t in_str_len = strlen(in_str)
/* ... */
for( str_ctrx2 = str_ctr = 0;
     str_ctr < in_str_len;
     str_ctr++, str_ctrx2 += 2 )
{
    out_str[str_ctrx2] = in_str[str_ctr];
    out_str[str_ctrx2 + 1] = in_str[str_ctr];
}
/* null-terminate the string */
out_str[str_ctrx2] = '\0';

我还想提到,您忘记了在程序中以空值终止字符串。我对此发表了评论,并在上面向您展示了如何进行。


0
投票
#include <stdio.h>

int main () {
    char str_in[100];
    char str_out[200] = "";
    int i, j;

    printf("Enter a word: ");
    scanf("%s", str_in);

   j=0;
   for (i = 0; i < sizeof(str_in); i++) {
       str_out[i] = str_in[j];
       str_out[i+1] = str_in[j];
       i++;
       j++;
   }

   printf("Duplicated word: %s", str_out);

   return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.