C++ 如何从字符数组中删除标点字符?
我的程序提示用户输入一个短语来检查它是否是回文,然后它应该打印出没有大写或特殊字符的短语,比如" ' , ? 我的问题是删除那些字符。我让我的程序忽略了它们我在问我该如何删除它们?我在我认为该声明的地方发表了评论。示例输出应该是:“夫人,我是亚当”到“夫人”C++ 如何从字符数组中删除标点字符?,c++,arrays,string,visual-studio,char,C++,Arrays,String,Visual Studio,Char,我的程序提示用户输入一个短语来检查它是否是回文,然后它应该打印出没有大写或特殊字符的短语,比如" ' , ? 我的问题是删除那些字符。我让我的程序忽略了它们我在问我该如何删除它们?我在我认为该声明的地方发表了评论。示例输出应该是:“夫人,我是亚当”到“夫人” #包括 #包括 #包括 使用名称空间std; int main() { //变量和数组 int const index=80; 字符短语[索引]; 字符新短语[索引]; int i,j,k,l; 布尔检验=真; //提示用户输入短语/单词
#包括
#包括
#包括
使用名称空间std;
int main()
{
//变量和数组
int const index=80;
字符短语[索引];
字符新短语[索引];
int i,j,k,l;
布尔检验=真;
//提示用户输入短语/单词
不能修改此行:
if(Phrase[k] != ' ')
将是:
if((phrase[k] != ' ') && (ispunct(phrase[k]) == false))
这意味着我们同时检查空格和标点符号
也可以考虑改写:
if(NewPhrase[i] == NewPhrase[j])
{;}
else
{
test = false;
}
因此:
if(NewPhrase[i] != NewPhrase[j])
test = false;
修改此行:
if(Phrase[k] != ' ')
将是:
if((phrase[k] != ' ') && (ispunct(phrase[k]) == false))
这意味着我们同时检查空格和标点符号
也可以考虑改写:
if(NewPhrase[i] == NewPhrase[j])
{;}
else
{
test = false;
}
因此:
if(NewPhrase[i] != NewPhrase[j])
test = false;
以下是建议:
使用std::string
用于确定字符串中的字符是否为标点符号
使用该选项删除标点符号
这是一行代码(加上一行额外的代码以方便lambda):
std::字符串短语=。。。。。;
自动isPunct=[](字符c){return std::isPunct(static_cast(c));}
phrase.erase(std::remove_if(phrase.begin()、phrase.end()、ispunt),
短语.end());
下一步,从另一个衬里转换为小写:
std::transform(phrase.begin(), phrase.end(), phrase.begin(),
[](char c)
{ return std::tolower(static_cast<unsigned char>(c));});
std::transform(phrase.begin()、phrase.end()、phrase.begin(),
[](字符c)
{return std::tolower(static_cast(c));};
以下是建议:
使用std::string
用于确定字符串中的字符是否为标点符号
使用该选项删除标点符号
这是一行代码(加上一行额外的代码以方便lambda):
std::字符串短语=。。。。。;
自动isPunct=[](字符c){return std::isPunct(static_cast(c));}
phrase.erase(std::remove_if(phrase.begin()、phrase.end()、ispunt),
短语.end());
下一步,从另一个衬里转换为小写:
std::transform(phrase.begin(), phrase.end(), phrase.begin(),
[](char c)
{ return std::tolower(static_cast<unsigned char>(c));});
std::transform(phrase.begin()、phrase.end()、phrase.begin(),
[](字符c)
{return std::tolower(static_cast(c));};
为什么不将第一个循环中的字符作为空格删除?为什么不将第一个循环中的字符作为空格删除?可能重复?我尝试了这个方法,效果很好,非常感谢:)我现在可以删除那些while循环中的其他语句没有问题!向上投票/接受,如果我回答了你的问题。A此外,还可以进一步压缩代码……您可以检查回文,同时忽略字符。这样就不需要一些循环,也不需要额外的循环array@MikeChristiansen就像在NewPharse中一样,在字符串tali尝试了这个方法之后,我得到了垃圾值,它成功了,非常感谢:)我可以删除其他的while循环的语句现在没有问题!如果我回答了你的问题,请向上投票/接受。此外,还可以进一步压缩代码……你可以检查回文,同时忽略字符。不再需要一些循环,也不需要额外的循环array@MikeChristiansen就像在纽法尔一样,我得到的是垃圾值很好!!顺便说一句,你解决了我的相关问题很好!!顺便说一句,你解决了我的相关问题