Удаление пробела и специальных символов из строки ac [duplicate]

0

поэтому я делаю палиндром, который игнорирует любое пробел или специальные символы. Ниже приведена часть моей функции. Что он делает, так это то, что в качестве аргумента требуется строка ac string, затем я создаю другую строку c, чтобы удалить пробелы и специальный символ из orignal. Когда я вывожу вторую строку c, она все равно будет иметь пробелы или специальные символы. Может ли кто-нибудь объяснить, почему он это делает? благодаря

bool isPalindrome(char *line)
{
   //variables
   bool palindrome = true;
   int length = strlen(line);
   int count = 0;


   //copy line to line2 with no spaces and no punctuation
   char *line2 = new char[length + 1];
   int count2 = 0;

   for(int i = 0; i < length; i++)
   {
      if(line[i] != ' ' && ispunct(line[i]) == false)
      {
         line2[count2] = line[i];
         count2 ++;
      }
   }
   for(int i = 0; i < count2; i++)
       cout << line[i];
   line2[length] = '\0';
Теги:
c-strings

2 ответа

1

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

for(int i = 0; i < count2; i++)
   cout << line[i];

должно быть

for(int i = 0; i < count2; i++)
   cout << line2[i];
  • 0
    Извините за поздний ответ, спасибо за вторую пару глаз :)
1

Вы теряете нулевую вторую строку на исходной длине:

line2[length] = '\0';

должно быть

line2[count2] = '\0';

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

int nextValidChar(const char *str, int &pos, const int step) {
    pos += step;
    while (pos >= 0 && str[pos] != '\0') {
        char c = str[i];
        if (c != ' ' && !ispunct(c)) {
            return c;
        }
        pos += step;
    }
    return -1;
}

С помощью этой функции nextValidChar два индекса в нуле и length-1 и вызовите nextValidChar несколько раз, чтобы найти действительные символы с обоих концов.

  • 0
    Большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню