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

Это упражнение, в котором я должен создать функцию, которая возвращает строку с именем «секретная личность», состоящую из даты вашего рождения, вашего имени и имени вашей матери (например, если «02/12/2007», «LUCY TOLKIEN» "и" JENNIFER "возвращает" 20070212LT * J "), но я изо всех сил пытаюсь объединить символы (например," L "и" T "из" LUCY TOLKIEN ") в строку с именем" secret identity ". Я надеюсь, что смог бы объяснить это хорошо. Вот что я сделал на данный момент:

int length(char * s) {
    int i, n = 0;
    for (i = 0; *(s + i) != '\0'; i++) {
        n++;
    }

    return n;
}

void concatenate(char * s, char * t) {
    int i = 0;
    int j;

    while (*(s+i) != '\0') {
        i++;
    }

    for (j = 0; *(t+i) != '\0'; j++) {
        *(s + i) = *(t + j);
        i++;
    }
    *(s + i + 1) = '\0';
}

void copy(char * dest, char * orig) {
    int i;
    for (i = 0; *(orig + i) != '\0'; i++) {
        *(dest + i) = *(orig + i);
    }

    *(dest + i) = '\0';
}

void geraIdentidade(void) {
    char * ident;
    int lname, ldate, lmom;

    char name[80];
    printf("Name: ");
    scanf(" %[^\n]s", name);

    lname = length(name);

    char date[11];
    printf("Date: ");
    scanf(" %[^\n]s", date);

    ldate = length(date);

    char mom[20];
    printf("Name (mom): ");
    scanf(" %[^\n]s", mom);

    lmom = length(mom);

    char day[3], month[3], year[5];
    int i, j, k; 

    for (i = 0; date[i] != '/'; i++) {
        day[i] = date[i];
    day[i + 1] = '\0';
    }

    for (j = 3, i = 0; date[j] != '/'; j++, i++) {
        month[i] = date[j];
    month[i + 1] = '\0';
    }

    for (k = 6, i = 0; k <= 9; k++, i++) {
        year[i] = date[k];
    year[i + 1] = '\0';
    }

    ident = (char*)malloc((lmom + ldate + lname) * sizeof(char)); //change lenght

    if (ident != NULL) {
        copy(ident, year);
        concatenate(ident, month);
        concatenate(ident, day);
    }
    else {
        return NULL;
    }

    printf("%s\n", ident);


}

int main(void) {

    geraIdentidade();

    return 0;
}

1 Ответ

1 голос
/ 01 мая 2020

На мой взгляд, 3 функции в вашем коде:

int length(char * s)
void concatenate(char * s, char * t)
void copy(char * dest, char * orig)

Вы можете сделать код проще, если используете некоторые C стандартные функции в <string.h>:

size_t strlen(const char *s); // for length
char *strcpy(char *dest, const char *src); // for copy 
char *strcat(char *dest, const char *src); // for concatenation

Если вы хотите объединить string и character, вам просто нужно преобразовать character в string, добавив символ \0 к символу, который вы хотите объединить. Например, если вы хотите объединить T в строку 20070212L:

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

int main()
{
    char str[11] = "20070212L";
    char ch[2] = "\0";
    ch[0] = 'T';
    strcat(str, ch);
    printf("str = %s", str);
    return 0;
}

Вывод:

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