功能类似于Strlen C ++

时间:2011-02-03 19:30:11

标签: c++ strlen

我想创建一个与Strlen一样的函数,我得到错误:“字符串下标超出范围”。我试着修理但不知道。

继承人代码:

#include "stdafx.h"
#include "stdafx.h"
#include <string>
#include <sstream>
#include <iostream>


using namespace std;

int strlen1( string str)
{
    int count=0;
    int i=0;
    while (str[i]!='\0')
        {
            count++;
            i++;
    }
    return count;
}

int _tmain(int argc, _TCHAR* argv[])
{
    string input;
    cin >> input;
    cout << strlen1(input) << endl;

    return 0;
}

谢谢!

4 个答案:

答案 0 :(得分:4)

简而言之,对于非const std::string访问超出字符串长度的元素具有未定义的行为(更准确地说,使用非const operator[]时这一点)。

C ++ 98 §21.3.4/ 1 ,关于std::string::operator[]

  

如果pos < size,则返回data()[pos]。否则,如果pos == size()const版本将返回charT()。否则行为未定义。

你的字符串是非const

你可以使它const,然后在标准中调用一个特殊条款,保证元素 n 的结果为零,但这并没有解决你的函数完全无法解决的问题std::string多余。

也许你的意思是让参数类型为char const*

这会更有意义,然后功能也会起作用。

干杯&amp;第h。,

答案 1 :(得分:3)

你似乎误以为std :: string与C风格的字符串(char const *)相同。这是不正确的。没有空终止符。

这是你的strlen函数唯一可行的方法:

int strlen1(string str) { return static_cast<int>(str.size()); }

答案 2 :(得分:1)

std::string有一个很好的size()方法。

答案 3 :(得分:0)

strlen基于零终止字符串(char *或char数组),C++ string基于长度+数据,你不能在字符串结束后访问数据(其中终端为零) )。除此之外,获取长度是C ++字符串(size())的标准属性,因此编写strlen的标准方法就是调用大小。