чтение по столбцам с помощью ptr - PullRequest
0 голосов
/ 18 июня 2009

, если я хочу печатать по строкам

char boo[] = 
     "abcd"
     "efgh"
     "ijkl"
     "mnop";

Я бы пошел с

for(i = 0; i < 4; i++)
{
  char row[] = "";
  for(j = 0; j < 4; j+)
    printf("%c", *(boo++))
  putchar('\n');
  puts(row);

}

мой вопрос, как я могу печатать столбцы, чтобы получить
AEIM
bfjn
cgko
dhlp

Ответы [ 3 ]

2 голосов
/ 19 июня 2009

Другие решения включали модификацию boo, которая, как вы сказали, противоречила правилам, здесь простое решение. Просто используйте внутренний цикл, который печатает каждый 4-й символ относительно внешнего цикла.

int main() {
    int i, j;
    for(i = 0; i < 4; ++i) {
        for(j = 0; j < 4; ++j) {
            putchar(boo[i + j * 4]);
        }
        putchar('\n');
    }
}

Подумайте об этом, это эффективно обрабатывает бу вручную, как если бы это был двумерный массив символов. Поскольку формула для индексации 1d-массива с помощью 2d имеет вид (x + y * width), вы можете представить, что i - это координата x, а j - координата y.

2 голосов
/ 18 июня 2009

Потому что это похоже на домашнюю работу, я просто дам вам подсказку.

Ваш boo не является массивом строк - препроцессор склеивает все смежные строковые литералы в одну строку, так что вы получили одну строку "abcdefghijklmnop"

Вы должны объявить его как

char *boo[] = {"abcd", "efgh", ...};
1 голос
/ 18 июня 2009
#include <stdio.h>

int main (int argc, char* argv[])
{
    char *boo[] = {"abcd", "efgh", "ijkl", "mnop"};
    int i, j;

    for(i = 0; i < 4; i++) {
        for(j = 0; j < 4; j++)
            printf("%c", boo[j][i]);

        printf("\n");
    }
}

-m

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