我们的网站是中文的,主页面的一部分显示了其他页面标题的列表,其最大长度被称为'26'(我假设这是使用英文字符计数,如果中文字符是使用英语?).我们用于此的线是:
<?php echo anchor('projects/'.$rs->url_project_title.'/'.$rs->project_id,substr(ucfirst($rs->project_title),0,26),'style="text-decoration:none;"'); ?>
但是,如果标题确实很长,那么代码会截断它,但是最后两个中文字符总是显示为 ,因为我猜它是使用英文版本的单词并分割中文字符(不知何故).也许我在想这个!?
例如....
原版的:
?????????????????????
截断版本:
??????????
您是否可以建议进行修改以启用所需数量的字符而不会产生 ??
我有以下字符串:
string = "asflkjsdhlkjsdhglk<body>Iwant\to+extr@ctth!sstr|ng<body>sdgdfsghsghsgh"
Run Code Online (Sandbox Code Playgroud)
我想在两个<body>标签之间提取字符串.我要找的结果是:
substring = "<body>Iwant\to+extr@ctth!sstr|ng<body>"
Run Code Online (Sandbox Code Playgroud)
请注意,两个<body>标记之间的子字符串可以包含字母,数字,标点符号和特殊字符.
有这么简单的方法吗?谢谢!
void
main()
{
std::string str1 = "abracadabra";
std::string str2 = "AbRaCaDaBra";
if (!str1.compare(str2)) {
cout << "Compares"
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?基本上使上述情况不敏感.相关问题我用Google搜索并在这里
http://msdn.microsoft.com/en-us/library/zkcaxw5y.aspx
有一个不区分大小写的方法String :: Compare(str1,str2,Bool).问题是这与我的工作方式有何关系.
是否有任何substr()类似的函数来获取vim脚本中的子字符串?如果不是这种任务的最佳替代品或替代品是什么?
我想确定下面数据框中的字符串列是否在字符串的前20个字符内至少重复5次字母"V"或"G".
样本数据:
data = data.frame(class = c('a','b','C'), string =
c("ASADSASAVVVVGVGGGSDASSSDDDFGDFGHFGHFGGGGGDDFFDDFGDFGTYJ",
"AWEERTGVTHRGEFGDFSDFSGGGGGGDAWSDFAASDADAADWERWEQWD",
"GRTVVGGVVVGGSWERGERVGEGDDFASDGGVQWEQWEQWERERYRYER"))
Run Code Online (Sandbox Code Playgroud)
例如,第一行中的字符串在前20个字符位置内具有"VVVVG".类似地,第三行中的字符串具有"VVGGV".
data
# class string
#1 a ASADSASAVVVVGVGGGSDASSSDDDFGDFGHFGHFGGGGGDDFFDDFGDFGTYJ
#2 b AWEERTGVTHRGEFGDFSDFSGGGGGGDAWSDFAASDADAADWERWEQWD
#3 C GRTVVGGVVVGGSWERGERVGEGDDFASDGGVQWEQWEQWERERYRYER
Run Code Online (Sandbox Code Playgroud)
所需的输出应如下所示:
# class string result
# 1 a ASADSASAVVVVGVGGGSDASSSDDDFGDFGHFGHFGGGGGDDFFDDFGDFGTYJ TRUE
# 2 b AWEERTGVTHRGEFGDFSDFSGGGGGGDAWSDFAASDADAADWERWEQWD FALSE
# 3 C GRTVVGGVVVGGSWERGERVGEGDDFASDGGVQWEQWEQWERERYRYER TRUE
Run Code Online (Sandbox Code Playgroud) 我需要获取std :: string中前N个字符的子字符串,假定为utf8.我学到了.substr不起作用的艰难方式......正如......期待的那样.
参考:我的字符串可能如下所示:任务:\n \n1亿2千万匹
我打算使用一个长字符串来操作大量的位标志,将结果字符串保存在Redis中.然而,偶然发现了一个php bug(?).包含00001101读取位的字节substr()返回意外值:
$bin = 0b00001101; // 13 - ASCII Carriage return
$c = substr($bin, 0, 1); // read this character
printf("Expectation: 00001101, reality: %08b\n", $c); // 00000001
Run Code Online (Sandbox Code Playgroud)
substr()二元安全的假设是错误的吗?还试过mb_substr(),将编码设置为8bit完全相同的结果.
一段时间以来,我一直想知道std::string的substr(pos, len)方法设计背后的基本原理。这对我来说仍然没有意义,所以我决定请教专家。std::out_of_range如果pos参数超过字符串长度加一,该函数将引发异常。这有时会很不方便(甚至很烦人),但我真正关心的是一致性和最小惊喜原则。事实证明,pos+len子串的“结束”位置允许超过字符串长度加一。一开始就不允许这样做,但在结束时不允许这样做,这对我来说是不一致的。允许它结束我暗示了解释
返回位置处的所有字符 pos <= i < pos+len
但是,那么我希望该函数为pos超过字符串长度的值返回一个空字符串,而不是抛出异常。作为旁注,根据这种解释,允许负值甚至是明智的pos(假设它具有有符号类型)。
这给我留下了以下问题:
std::string是不是空值终止,而是跟踪字符串的长度。如果这是真正的原因,那么我个人认为这是一个非常糟糕的原因。substr未来的行为?我想不会,因为默默地破坏现有代码肯定比忍受这种扭曲更糟糕......?我刚刚找到了前面的代码 substr( $str, 0, 0, $prepend )
my $foo = " world!"
substr( $foo, 0, 0, "Hello " );
Run Code Online (Sandbox Code Playgroud)
这比
my $foo = " world!"
$foo = "Hello $foo";
Run Code Online (Sandbox Code Playgroud) 我的文件中有以下几行
$ cat test.txt
69|1074330570|1,sip:+121345633210x3Bverstat=TN-Validation-Passed|tel:+12134565534|0
69|1077822111|2,;tel:+2223120011~sip:+2223120051@vzpps.com;|sip:+13123120022@vzpps.com|0
69|1077988012|1,sip:+121510016070x3Bverstat=TN-Validation-Passed|tel:+136965339510x3Bnpd|0
Run Code Online (Sandbox Code Playgroud)
我想用电话号码替换文件中的第三列和第四列,如下所示:
69|1074330570|2134563321|2134565534|0
69|1077822111|2223120011|3123120022|0
69|1077988012|2151001607|3696533951|0
Run Code Online (Sandbox Code Playgroud)
好的部分是所有文件在第三列和第四列中都会有一个“+”。现在困难的部分是,有时我们会得到第一行第三列中注意到的 11 位数字 (121345633210),有时“+”后没有添加“1”。因此,如果加号后面有 1,则排除 1。否则,从“+”号后面开始长度。同样,如果有 11 位数字,只需子串 10。此外,如果有超过 1 个数字(如第 2 行),我只需要选取“+”号后面的第一个数字,例如 2223120011,而不是 2223120051。
我尝试了以下方法
awk -F"|" 'BEGIN {FS="+"}{print substr($3,2,10)}' test.txt
Run Code Online (Sandbox Code Playgroud)
但它为第二行提供了不正确的值,因为它需要在“+”号之后开始。