substr()从1.到最后一个字符C ++

时间:2016-01-09 20:01:27

标签: c++ string substr

我想使用substr()函数来获取从1到最后的字符链,而不是0。 我应该这样做: string str = xyz.substr(1, xyz.length()); 还是(xyz.length() - 1)?为什么?

4 个答案:

答案 0 :(得分:6)

您无需指定要包含的字符数。正如我在comment中所说的那样:

string str = xyz.substr(1)

这将返回所有字符,直到字符串

结束

答案 1 :(得分:5)

substr的签名是

string substr (size_t pos = 0, size_t len = npos) const;

由于新字符串的长度比旧字符串小1,您应该按如下方式调用它:

string str = xyz.substr(1, xyz.length() - 1);

您实际上可以省略第二个参数,因为它默认为string :: npos。 “string :: npos的值表示直到字符串结尾的所有字符。” (见http://www.cplusplus.com/reference/string/string/substr/)。

答案 2 :(得分:4)

两个声明

nil

std::string str = xyz.substr( 1, xyz.length() ); 
如果std::string str = xyz.substr( 1, xyz.length() - 1 ); 的大小不等于0,则

是有效的(尽管第一个可能会使代码的读者感到困惑)。

然而这个宣言

str

更具表现力。

如果字符串std::string str = xyz.substr( 1 ); 可以是空字符串,那么您应该编写类似

的内容
xyz

std::string str = xyz.substr( !xyz.empty() ? 1 : 0 );

答案 3 :(得分:0)

如果要查找从某个索引开始到字符串结尾的字符串子字符串,可以执行以下操作。

char * substring(char *s){
    return s;
 }

 int main(){
char s[1][n]; // suppose we just take a single string.
char *sub;

scanf("%s",s[1]);            //s[1]="ababaaa"

sub=substring(s[1]+1);      //sub="babaaa"(starting from 1st index).
sub=substring(s[1]+3);      //sub="baaa" (starting from 3rd index).

return 0;
}