perl替换字符串中的字符但保留特殊字符或空格

时间:2015-08-01 19:37:33

标签: perl replace

我想创建一个替换字符并保留特殊字符的程序。示例输入和输出如下所示。

这是我到目前为止所做的:

#include <features.h>
#undef __USE_SVID

#include <random>
#include <iostream>

int main(){   
    std::cout << DOMAIN << std::endl;
    return 0;
}

输入:

  

嗨!你好吗?

输出:

  

JK! krz duh brx itnsl?

2 个答案:

答案 0 :(得分:2)

您的代码中的一些内容没有意义:

  • 缺少use strict; use warnings;
  • 所有变量都是全局的(您应该使用my来创建变量)
  • @foo.length不是数组@foo中的元素数。它是数组@foo中与$_中的字符数串联的元素数(因为标量上下文中的数组返回它们的长度,.连接字符串,length起作用默认情况下在$_上。
  • join ($char)始终返回空字符串:您使用$char作为分隔符加入空列表(无元素)。

这是尝试解决所有这些问题:

use strict;
use warnings;

my $sentence = readline;

$sentence =~ s{([A-Za-z]+)}{
    my $word = $1;
    join '', map {
        my $base = ord(/^[A-Z]/ ? 'A' : 'a');
        chr((ord($_) - $base + length($word)) % 26 + $base)
    } split //, $word
}eg;

print $sentence;

答案 1 :(得分:1)

认为你在做什么是rot3编码,但如果是这样那么你的例子就错了

select distinct p.part_id,p.part_number,p.description,c.main_part_id
from part p
left join (
            select main_part_id,connect_by_root(main_part_id) real_part_id
            from alternate_part
            connect by NOCYCLE prior main_part_id = alternate_part_id
        ) c 
on p.part_id = c.real_part_id and p.part_id != c.main_part_id
order by p.part_id

输出

my $sentence = 'Hi! how are you doing?';
$sentence =~ tr/A-Za-z/D-ZA-Cd-za-c/;
print $sentence, "\n";

相似但不完全相同
Kl! krz duh brx grlqj?