Строки в C, как получить подстроку

У меня есть строка:

char * someString;

Если я хочу первые пять букв этой строки и хочу установить ее на otherString, как я сделал бы это?

48
задан Peter Mortensen 3 June 2017 в 22:02
поделиться

7 ответов

#include <string.h>
...
char otherString[6]; // note 6, not 5, there's one there for the null terminator
...
strncpy(otherString, someString, 5);
otherString[5] = '\0'; // place the null terminator
53
ответ дан 26 November 2019 в 18:53
поделиться

Обобщенные:

char* subString (const char* input, int offset, int len, char* dest)
{
  int input_len = strlen (input);

  if (offset + len > input_len)
  {
     return NULL;
  }

  strncpy (dest, input + offset, len);
  return dest;
}

char dest[80];
const char* source = "hello world";

if (subString (source, 0, 5, dest))
{
  printf ("%s\n", dest);
}
7
ответ дан 26 November 2019 в 18:53
поделиться

, вам необходимо выделить память для новой строки. В целом за подстроку длины n, что-то вроде этого может работать для вас (не забудьте делать проверку границ ...)

char *subString(char *someString, int n) 
{
   char *new = malloc(sizeof(char)*n+1);
   strncpy(new, someString, n);
   new[n] = '\0';
   return new;
}

Это вернет подстроку первых N символов SAMESTRION. Убедитесь, что вы освободите память, когда вы закончите, используя бесплатно ().

5
ответ дан 26 November 2019 в 18:53
поделиться
#include <stdio.h>
#include <string.h>

int main ()
{
        char someString[]="abcdedgh";
        char otherString[]="00000";
        memcpy (otherString, someString, 5);
        printf ("someString: %s\notherString: %s\n", someString, otherString);
        return 0;
}

Вам не понадобится stdio.h Если вы не используете оператор PrintF и введев константы во всем, но самые маленькие программы плохой вид, и их следует избегать.

0
ответ дан 26 November 2019 в 18:53
поделиться
strncpy(otherString, someString, 5);

Не забудьте выделить память для других.

0
ответ дан 26 November 2019 в 18:53
поделиться

Делают все это в двух падающих мазутах:

char *otherString = strncpy((char*)malloc(6), someString);
otherString[5] = 0;
0
ответ дан 26 November 2019 в 18:53
поделиться
char* someString = "abcdedgh";
char* otherString = 0;

otherString = (char*)malloc(5+1);
memcpy(otherString,someString,5);
otherString[5] = 0;

Обновление :
Совет: Хороший способ понять определения называется правилом правого левого (некоторые ссылки в конце):

Начните чтение от идентификатора и сказать Aloud => SomeString ... »
Сейчас иди направо от самого страны (заявление закончилось с запятой, нечего сказать).
Теперь пойти налево идентификатора ( * встречается) => Так сказать «... указатель на ...».
Теперь иди налево « * » (ключевое слово Char найден) => Скажем "...
Сделанный!

Итак CHAR * SOOTRING; => «SOOTRING - это указатель для Char».

Поскольку указатель просто указывает на определенный адрес памяти, он также может быть использован в качестве «отправной точки» для «массива» символов.

Это работает с чем-либо .. Дайте ей:

char* s[2]; //=> s is an array of two pointers to char
char** someThing; //=> someThing is a pointer to a pointer to char.
//Note: We look in the brackets first, and then move outward
char (* s)[2]; //=> s is a pointer to an array of two char

Некоторые ссылки: Как интерпретировать сложные объявления C / C ++ и Как читать объявления C

7
ответ дан 26 November 2019 в 18:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: