Удалить пробел после символьной строки (указатели) - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть структурный список имен, фамилий, адресов ... Все вводятся в отдельных строках CHAR.Проблема в том, что когда я вставляю одну из этих строк, я также получаю много пробелов после этого.Например, для строк Имя и Фамилия я получаю: Бритни ............................................ Джонсон ................................... (точки обозначают пробел вконец каждой строки)

Вот мой код:

void table_names (void)
{
ADDRESS *tmp_ptr;
printf ("All names in address book:\n");
tmp_ptr= hol; 
printf(" ______________________________\n");
printf("|  FIRST NAMES   | LAST NAMES  |\n");
printf("|________________|_____________|\n");
while(tmp_ptr!=NULL)
   {   
    printf ("%s%s",tmp_ptr->name,tmp_ptr->lname);
    tmp_ptr= tmp_ptr->next;
   }
}

Любая помощь о том, как избавиться от пробелов?

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

Я предполагаю под вставкой, что вы имеете в виду дисплей.

С этим предположением я также предполагаю, что всякий раз, когда формируются tmp_ptr-> name и tmp_ptr-> lname, весь их буфер заполняется пробелами, и только в конце есть NUL-терминатор ('\0').

Где бы они ни создавались, вам нужно отрубить все лишние пробелы, поставив '\0' с первого взгляда на все пробелы. Вероятно, разумным подходом было бы работать в обратном направлении, чтобы учесть пробелы в именах.

int i;

for (i = BUFFER_LENGTH - 1; i > -1; --i)
{
    if (value[i] != ' ')
    {
        if (i + 1 != BUFFER_LENGTH)
        {
            value[i + 1] = '\0';
        }
        break;
    }
}

Это можно сделать и с необработанным указателем, и предполагается, что это передается через функцию, подобную:

void rtrim(char *value, const int BUFFER_LENGTH);
0 голосов
/ 23 июля 2015

Для печати без пробелов используйте формат .*s и strcspn().

.*s принимает значение int в качестве максимального числа char для печати. ​​
strcspn(s," ") вычисляет длину исходного префикса, не содержащего ' '.

Модификация s не требуется.Этот метод не работает, если пробел встречается в фамилии.

int main(void) {
  const char *s = "Johnson        ";
  printf("'%.*s'\n", (int) strcspn(s, " "), s);
  return 0;
}

'Johnson'

В противном случае это немного большеРабота.Поиск последнего ' ', если есть.

int main(void) {
  const char *s = "Johnson Smith  ";
  size_t len = strlen(s);
  while (len > 0 && s[len-1] == ' ') {
    len--;
  }
  printf("'%.*s'\n", (int) len, s);
  return 0;
}

'Johnson Smith'

...