【问题标题】:How to extract spaces from char array string?如何从char数组字符串中提取空格?
【发布时间】:2015-03-01 16:40:19
【问题描述】:

程序的作用是在提取标点符号的同时验证字符串是否为回文。该代码提取双引号和单引号,但我似乎无法弄清楚如何提取空格。当从调试器查看带有空格的数组值时,似乎字符串在插入空格的位置被截断。我从键盘输入 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


}

【问题讨论】:

    标签: c++ arrays string


    【解决方案1】:

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

    cin >> strarry;
    

    cin 将空格、制表符、换行符等视为终止字符,因此一旦遇到这些字符之一,它将停止读取该行的其余部分。

    解决方案是使用:

    getline(cin, strarry);
    

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

    【讨论】:

      【解决方案2】:

      第一点;使用字符串。这是 c++,抛弃 c 风格的字符串

      第二点;使用getline。当您执行cin &gt;&gt; strarry 时,它只会读取到第一个空格。使用getline(cin,str)修复此问题

      第三点;首先修剪空白。如果您首先构造一个没有 whitespce 的新字符串,那么 is-a-palindrome 函数将方式更简单地编写。你可以用擦除删除习语来做到这一点,isspace

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-30
        • 2021-12-10
        • 2019-08-03
        • 2016-10-24
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        相关资源
        最近更新 更多