Подтвердить что ты не робот

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

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

char * someString;

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

4b9b3361

Ответ 1

#include <string.h>
...
char otherString[6]; // note 6, not 5, there one there for the null terminator
...
strncpy(otherString, someString, 5);
otherString[5] = '\0'; // place the null terminator

Ответ 2

char* someString = "abcdedgh";
char* otherString = 0;

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

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

Начните читать с идентификатора и скажите вслух = > "someString is..."
Теперь перейдите к правой части someString (утверждение закончилось точкой с запятой, нечего сказать).
Теперь идите слева от идентификатора (встречается *) = > так скажите "... указатель на...".
Теперь перейдите влево от "*" (найдено ключевое слово char) = > say "..char".
Готово!

So char* someString; = > "someString является указателем на 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

Ответ 3

Обобщенные:

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);
}

Ответ 4

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

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

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

Ответ 5

Вы можете использовать snprintf для получения подстроки массива char с точностью. Вот пример файла под названием substring.c:

#include <stdio.h>

int main()
{
    const char source[] = "This is a string array";
    char dest[17];

    // get first 16 characters using precision
    snprintf(dest, sizeof(dest), "%.16s", source);

    // print substring
    puts(dest);
} // end main

Вывод:

Это строка

Примечание:

Для получения дополнительной информации см. страницу руководства printf.

Ответ 6

strncpy(otherString, someString, 5);

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

Ответ 7

#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 и ставьте константы во всех, кроме самых маленьких программ, в плохую форму, и ее следует избегать.

Ответ 8

Выполняя все это двумя выпадами:

char *otherString = strncpy((char*)malloc(6), someString);
otherString[5] = 0;

Ответ 9

char largeSrt[] = "123456789-123";  // original string

char * substr;
substr = strchr(largeSrt, '-');     // we save the new string "-123"
int substringLength = strlen(largeSrt) - strlen(substr); // 13-4=9 (bigger string size) - (new string size) 

char *newStr = malloc(sizeof(char) * substringLength + 1);// keep memory free to new string
strcpy(newStr, largeSrt, substringLength);  // copy only 9 characters 
newStr[substringLength] = '\0'; // close the new string with final character

printf("newStr=%s\n", newStr);

free(newStr);   // you free the memory 

Ответ 10

Я думаю, что это простой способ... но я не знаю, как я могу передать переменную результата непосредственно, тогда я создаю локальный массив char как temp и верну его.

char* substr(char *buff, uint8_t start,uint8_t len, char* substr)
{
    strncpy(substr, buff+start, len);
    substr[len] = 0;
    return substr;
}

Ответ 11

Этот код является функцией substr, которая имитирует функцию с таким же именем, присутствующую в других языках, просто разберите: string, start и количество символов, например:

printf( "SUBSTR: %s", substr("HELLO WORLD!",2,5) );

Выше будет напечатано Привет. Если вы передадите значение по всей длине строки, оно будет игнорироваться, так как цикл только повторяет длину строки.

char *substr(char *s, int a, int b) {
    char *r = (char*)malloc(b);
    strcpy(r, "");
    int m=0, n=0;
    while(s[n]!='\0')
    {
        if ( n>=a && m<b ){
            r[m] = s[n];
            m++;
        }   
        n++;
    }
    r[m]='\0';
    return r;
}