Как я могу продублировать письмо в строке? - PullRequest
1 голос
/ 10 января 2020

Я хочу написать программу, в которой она дублирует каждую букву в заданной строке.

Например, если ввод 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;
}

Ответы [ 4 ]

1 голос
/ 10 января 2020

Для начала массив символов назначения должен быть как минимум в два раза больше исходного массива.

l oop, выполняющий копирование, может выглядеть следующим образом

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 голосов
/ 10 января 2020
#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;
}
0 голосов
/ 10 января 2020

Я бы посоветовал выделить только необходимый объем памяти:

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

, а затем использовать другую переменную l oop, каждый раз считающую по 2, чтобы у вас было в 2 раза больше места для каждого символа в вашей l oop.

Если вы сделаете это, вы должны также поставить + 1 рядом с новой переменной l oop, чтобы скопировать ее в текущий и следующий элементы строки, таким образом дублируя символов.

Я бы также посоветовал вам использовать size_t для ваших переменных l oop, чтобы соответствовать возвращению 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 голосов
/ 10 января 2020

Это один из способов сделать то, что вы хотите - поскольку вы знаете, что два индекса в str_out, к которым вы хотите получить доступ, соответствуют i th и i+1 th позициям str_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;
}

Вы также можете использовать другую переменную и обновить внутри l oop следующим образом:

#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 ваших констант, а не иметь их в твой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...