2015-03-01 4 views
-1

Функция программы - проверить, является ли строка палиндром при извлечении пунктуации. Код извлекает двойные кавычки и одинарные кавычки, но я не могу понять, как извлечь пробелы. При просмотре значения массива с пробелами из отладчика кажется, что строка усечена, где были вставлены пробелы. Я вводил ra da r с клавиатуры, а значение массива строки равно ra в списке наблюдателей отладчика.Как извлечь пробелы из строки массива символов?

#include "stdafx.h" 
#include <iostream> 

bool palindrome(char[], int); 

int main() 
{ 
using namespace std; 
bool status; 
int siz,i; 
char strarry[20]; 
siz = 0; 

cout << " enter string" << endl; 
cin >> strarry; 

for (i = 0; strarry[i] != '\0'; i++) 
    ++siz; 

status = palindrome(strarry, siz); 
if (status) 
    cout << " the string is a palindrome" << endl; 
else 
    cout << "not a palindrome" << endl; 

cin.clear(); 
cin.ignore(255, '/n'); 
cin.get(); 


return 0; 
} 

bool palindrome(char arry[], int size) 
{ 
int i, l; 
char arryn, arrysize; 
static bool search = false; 
static bool match = false; 
static bool found = false; 
static int n = 0; 
int end = size - 1; 

if (search != true){ 
    for (i = 0; i <= end; i++){ 
    if ((arry[i] == ' ') || (arry[i] == '\'') || (arry[i] == '\"')){ 
      if ((end - i) >= 1){ 
       for (l = i; l <= end; l++) 
        arry[l] = arry[l + 1]; 
       --end; 
       size = end; 
      } 
      else{ 
       size= end - 1; 
      } 
      found = true; 
    }//end if 
    }// end for 
    if (found == false) 
     size = end; 
    search = true; 
}//end if 



if (((n - size) <= 1) && match) 
    return true; 
else{ 
    arryn = arry[n]; 
    arrysize = arry[size]; 
    if (arry[n] == arry[size]){ 
     ++n; 
     match = true; 
     return palindrome(arry, size - 1); 
    } 
    else{ 
     match = false; 
     return false; 
    }//end else 

}// end else 


} 

ответ

0

Проблема с кодом, что вы используете:

cin >> strarry; 

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

Решение должно использовать:

getline(cin, strarry); 

Это ограничивает разделитель символов новой строки.

0

точка одна; используйте строки. это C++, строки c c style style

точка два; использование getline. когда вы делаете cin >> strarry, он будет читать только до первого пробела. исправить это, используя getline(cin,str)

пункт три; сначала протрите пробел. функция is-a-palindrome будет способ проще написать, если вы сначала построили новую строку без whitespce. вы можете сделать это с помощью стирания-удаления идиомы и isspace