использование строкового указателя для печати комбинаций символ-целое - PullRequest
1 голос
/ 19 декабря 2010

У меня есть функция C, которая принимает указатель строки в качестве параметра.Эта функция возвращает символ, на который указывает указатель.Я хотел бы создать = много символов в зависимости от требований.Предположим, у меня есть четыре двери в доме.Я хотел бы дать разные имена для разных дверей, как d1,d2,d3.....В этом случае я хотел бы создать указатель строки, который указывает на строку и целое число, чтобы я мог получить символы, которые отличаются только числовыми значениями.Это помогает мне классифицировать символы, которые видят строковое значение.Я хотел бы знать, как я могу объявить указатель на строку, чтобы я мог создать символ, который я упомянул выше.

[EDIT]

Я постараюсь прояснить это.

У меня есть массив из двух указателей

const char *test[] ={"a","12345"}

Я бы хотел, чтобы указатель указывал на точки a, 1, a, 2 и .... и так далее.Есть ли способ сделать это?

Ответы [ 3 ]

3 голосов
/ 19 декабря 2010

Поскольку вопрос настолько двусмысленный, вот еще один:

#include <stdio.h>

int main(int argc, char *argv) {
    const char *test[] = { "a", "12345" };

    int i, j;

    for (i = 0; test[0][i] != 0; ++i)
        for (j = 0; test[1][j] != 0; ++j)
            printf("%c%c\n", test[0][i], test[1][j]);

    return 0;
}

Вывод:

a1
a2
a3
a4
a5
1 голос
/ 19 декабря 2010

Непонятно, но я думаю, что вы хотите иметь возможность доступа к отдельным персонажам.Это то, что вы ищете?

#include <stdio.h>

int main()
{
    int i;
    char* name[] = {"a1","b2","c3"};
    for(i=0;i<3;i++)
        printf("%s = %c %c\n",name[i],name[i][0],name[i][1]);
}

Вывод:

a1 = a 1
b2 = b 2
c3 = c 3
1 голос
/ 19 декабря 2010

Строка - это указатель на символы, поэтому вы не можете указывать на целые числа. Вы можете сделать некоторую конверсионную работу, но она не подходит для вашей проблемы. То, что вам нужно, это структура.

Реализация вашего примера:

struct Doors {
    int num;
    char sym;
} d1, d2, d3;

d1.sym = 'd';
d1.num = 1;

d2.sym = 'd';
d2.num = 2;

d3.sym = 'd';
d3.num = 3;

EDIT

Мое решение изменено как реализация вашего второго примера:

struct Doors {
    int * nums;
    const char * sym;
} d;

int n = 3; // Amount of doors.
d.nums = (int *) malloc(n * sizeof(int)); // Memory for int array of n elements.

if (d.nums == 0) {
    /* Memory could not be allocated. */
} else {
    d.sym = "d";
    for (int i = 0; i < n; ++i) {
        d.nums[i] = i + 1;
    }

    // d -> { "d", [ 1, 2, 3 ] }

    free(d.nums); // Free the allocated memory.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...