Обрезка строки в C (без использования библиотечных функций) - PullRequest
3 голосов
/ 16 февраля 2010

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

В основном я пытаюсь удалить пробелы с концамассива символов в C.

  • У меня есть метод, чтобы определить длину строки и сохранить ее в формате int.

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

  • Затем я установил указатель на длину строки - 1 (чтобы не проходить мимо массиваindex of n-1).

  • Если элемент здесь не является пробелом, то я знаю, что в конце нет пробелов, поэтому я просто возвращаю элемент в целом.

Вот где я застрял, теперь я знаю, что это был пробел ' ' в конце, верно?Без использования библиотечной функции, как же я могу удалить это пространство из строки и продолжить цикл, пока не встретлю символ, который не является ' '?Цикл до тех пор, пока я не встретлю персонажа, который не является ' ' (пробел), прост - это всего лишь удаление, которое доказывает чудовище.

Пожалуйста, не ищите полных решений, поскольку это домашняя работа, и яне хочу обманывать.

Ответы [ 6 ]

9 голосов
/ 16 февраля 2010

Хитрость в том, что строка в C заканчивается символом NUL (значение ноль). Таким образом, вы можете удалить символ из конца строки, просто перезаписав его нулевым значением.

6 голосов
/ 16 февраля 2010

Есть два метода

  1. Рассматривайте вашу строку как завершенную нулем, другими словами, истинным концом строки является «\ 0» (0x00), тогда вы можете просто заменить пробелы в конце на «\ 0», пока не попадете в пробел Вст.
  2. Определите длину новой строки и скопируйте ее. В основном, когда вы работаете в обратном направлении, уменьшайте длину до тех пор, пока не попадете в непробельный символ (будьте осторожны с ошибкой, превышающей одну, здесь). Наконец, создайте новый массив символов и скопируйте элементы на основе этой длины.

Это зависит от того, что вам нужно сделать, какой путь лучше.

0 голосов
/ 17 февраля 2010

Вы знаете длину строки, поэтому просто начните с конца строки и работайте в обратном направлении. Всякий раз, когда вы сталкиваетесь с пробелом, просто замените его нулевым завершающим символом, \ 0.

0 голосов
/ 16 февраля 2010

Строки в Си заканчиваются символом '\ 0'.

Если у вас есть символьный указатель

, то ...

   *p = 'c';                    and
   *(p  + 0) = 'c';             and
   p[0] = 'c';

все напишет 'c' в байт, на который указывает

.

Продолжая эту тему ...

   *(p + 1) = 'c';              and
   p[1] = 'c';

запишет 'c' в байт после того, на что указывает

.

0 голосов
/ 16 февраля 2010

Строки в Си заканчиваются нулем.

0 голосов
/ 16 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...