Как чередовать два символа с указателями в C - PullRequest
0 голосов
/ 08 ноября 2011

Мне плохо, когда я пытаюсь найти решение для этого задания, потому что мои идеи не сработали ...

Я должен чередовать две строки char, используя указатели. Смотрите следующий пример (этот пример не код):

char s1 = "My House Black"
char s2 = "Are very near"

Результат: "MAyr eH ovuesrey Bnleaacrk"

Как я могу это сделать?

Ответы [ 6 ]

0 голосов
/ 08 ноября 2011

Это то, что вы хотите?

char * s1 = "My House Black";
char * s2 = "Are very near";

char * s = (char *)malloc(strlen(s1) + strlen(s2) + 1);

char * p1 = s1;
char * p2 = s2;
char * p = s;
while (*p1 && *p2)
{
    *p++ = *p1++;
    *p++ = *p2++;
}
while (*p1)
{
    *p++ = *p1++;
}
while (*p2)
{
    *p++ = *p2++;
}
*p = '\0';
0 голосов
/ 08 ноября 2011

Попробуйте:

int total = strlen(char1) + strlen(char2);
int i1 = 0, i2 = 0;
for(i = 0; i < total; i++)
{
    if(i % 2 == 0)
    {
        result[i] = char1[i1];
        i1++;
    }
    else
    {
        result[i] = char2[i2];
        i2++;
    }
}
0 голосов
/ 08 ноября 2011

Вам нужна целевая строка, которая достаточно велика, чтобы содержать как входные строки, так и терминатор строки.

Тогда вам, вероятно, следует использовать цикл (while или for), в который вы копируете один символкаждая входная строка в каждой итерации.

Для дополнительных кредитов:

Рассмотрим случай, когда входные строки имеют неравную длину.

0 голосов
/ 08 ноября 2011

Так как это помеченное домашнее задание, я не хочу напрямую отправлять код. Но создайте три символьных массива, по одному для каждого ввода, один достаточно длинный, чтобы вместить вывод, и обойдите входные символьные массивы по одному символу за раз (используйте арифметику указателя). Сохраните символ в вашей выходной строке. Продолжайте, пока не дойдете до конца каждой строки. Не забудьте нулевые окончания!

0 голосов
/ 08 ноября 2011

Так как это домашнее задание, я просто дам вам набросок.

Прежде всего объявите две строки:

const char *s1 = "My House Black";
const char *s2 = "Are very near";

Далее объявите два указателя на char:

char *p1 = s1;
char *p2 = s2;

Теперь введите цикл while. Условием должно быть, чтобы *p1 или *p2 не были равны нулю.

Внутри контура выведите *p1, если он не равен нулю, а затем выведите *p2, если он не равен нулю. Увеличивайте каждый указатель, если он ссылается на ненулевой символ.

Вот и все, все готово!

0 голосов
/ 08 ноября 2011

Вот подсказка (псевдокод):

result = ""
for i = 0 to longest string's length:
    result += some character      (whose?)
    result += another character   (also, whose?)

Будьте осторожны: вам нужно где-то немного проверить, иначе могут случиться плохие вещи.

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