如何从字符数组字符串中提取空格

How to extract spaces from char array string?

本文关键字:提取 空格 字符串 数组 字符      更新时间:2023-10-16

程序的功能是在提取标点符号时验证字符串是否为回文。代码提取了双引号和单引号,但我似乎不知道如何提取空格。当从调试器中观察带有空格的数组值时,字符串似乎在插入空格的地方被截断了。我从键盘输入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] != ''; 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

}

代码的问题在于您使用的是:

cin >> strarry;

cin将空白、制表符、新行等视为终止字符,因此一旦遇到其中一个字符,它将停止读取行的剩余部分。

解决方案是使用:

getline(cin, strarry);

这将分隔符限制为换行符。

点一;使用字符串。这是c++,丢弃c样式字符串

第二点;使用CCD_ 1。当您执行cin >> strarry时,它将只读取第一个空白。使用getline(cin,str) 修复此问题

第三点;先修剪空白。如果您首先构造一个没有whitespce的新字符串,is-a-parindrome函数将以的方式编写起来更简单。您可以使用擦除-删除习惯用法和isspace