Как индексировать строку в C, как строку в Python? - PullRequest
1 голос
/ 21 октября 2019

Например, в python вы можете индексировать строки, подобные этой

some_string = "hello"
substring = some_string[0:3]

, а подстрока будет "hel"

, однако в C, если у меня есть

char some_string[] = {'h', 'e', 'l', 'l', 'o'};

Есть ли способ получить просто

{'h', 'e', 'l'}

Возможно, есть очень простое решение, которое я упускаю из виду, но иногда мне трудно думать на двух языках.

Ответы [ 2 ]

3 голосов
/ 21 октября 2019

Не очень просто, в первую очередь из-за управления памятью. Вам нужно либо substring, чтобы быть массивом из достаточно большого количества символов, либо вам нужно динамически распределять память. например:

char *some_string = "hello";
char substring[4];
strncpy(substring,some_string,3);
substring[3]='\0';

или:

char *substring(char *s, int start, int len)
{
    char *s2= malloc(len+1);
    strncpy(s2, s+start, len);
    s2[len]='\0';
    return s2;
}
2 голосов
/ 21 октября 2019

Для начала это объявление массива символов

char some_string[] = {'h', 'e', 'l', 'l', 'o'};

не содержит строку.

Вы должны написать

char some_string[] = {'h', 'e', 'l', 'l', 'o', '\0'};

или

char some_string[] = {"hello"};

или

char some_string[] = "hello";

Единственный способ получить подстроку - скопировать поддиапазон символов в другом массиве символов.

например

#include <string.h>

// ...

char substring[4];

strncpy( substring, some_string, 3 );
substring[3] = '\0';
...