C строковые функции - PullRequest
       31

C строковые функции

1 голос
/ 24 февраля 2012

В C как извлечь первые n символов из строки, пока не найду пробел в строке? По сути, какая функция C найдет для меня позицию следующего пробела, а какая функция C даст мне подстроку? Я думаю с точки зрения C ++. такие как:

string str = "Help me Please!";
int blankPos = str.find(' ');
str.substr(0, blankPos);

Спасибо,

Ответы [ 7 ]

1 голос
/ 31 декабря 2012
char str[] = "Help me Please";    // Source string
char newstr[80];                  // Result string

// Copy substring characters until you reach ' ' (i.e. "Help")
for (i=0; str[i] != ' '; i++) {
  newstr[i] = str[i];
}
newstr[i] = 0;                    // Add string terminator at the end of substring
1 голос
/ 24 февраля 2012
  1. Используйте strchr, чтобы найти место.
  2. Выделите новый char буфер для хранения подстроки.
  3. Скопируйте подстроку в буфер с помощью memcpy.
1 голос
/ 24 февраля 2012

подсказка: strchr()

Мне нужно ввести еще несколько символов.

0 голосов
/ 31 декабря 2012

Другой вариант, позволяющий использовать более одного символа в качестве разделителя.

char str[] = "Help me Please";
char newstr[80]; 

char *p = strpbrk(str, " \t\xA0");   /* space, tab or non-breaking space (assuming western encoding, that part would need adaptation to be trule portable) */
if(p)
  strlcpy(newstr, str, p - str + 1);
else
  newstr[0] = 0;

strlcpy не является стандартным, но достаточно распространенным для использования. Если его нет на платформе, его легко реализовать. Обратите внимание, что strlcpy всегда помещает 0 в последнюю скопированную позицию, перед +1 в выражении длины.

0 голосов
/ 24 февраля 2012

Если вы просто хотите получить первую часть строки, используйте strchr(), как предлагали все. Если вы хотите разбить строку на подстроки, разделенные пробелами, посмотрите на strtok().

0 голосов
/ 24 февраля 2012

Итак, вы хотите что-то вроде:

#include <string.h>

const char *str = "Help me Please";

//find space charachter or end of string if no space found
char *substr, *space = strchr(str, ' ');
int len = space ? (space-str) : strlen(str);

//create new string and copy data
substr = malloc(len+1);
memcpy(substr, str, len);
substr[len] = 0;
0 голосов
/ 24 февраля 2012
char* str = "Help me Please";
int i =0;

//Find first space
while(str[i] != ' '){
  i++;
}
char* newstr;
newstr = strndup(str+0,i);

Полагаю, вы также можете использовать strchr (), чтобы получить первый пробел в строке.

...