不使用c ++中的库函数计算不包括空字符的字符串长度?

时间:2015-03-17 17:20:51

标签: c++ string function

我是一名c ++初学者,我正在努力为以下作业制作一个程序:

创建一个名为“StringLength”的项目。主程序应该包含一个函数(称为findStringLength),它将计算字符串的长度(即字符串中的字符数,不包括终止空字符)。 主程序应使用以下测试字符串测试函数的操作: "短串" "用于测试目的的较长字符串" "" " " 声明四个字符数组并分配这些测试值。程序的输出应采用下面显示的每个测试字符串的形式: 长度"短" = 5 你应该编写代码来自己计算字符串的长度;不要使用任何库函数来执行此操作。 请注意,如果引号为"要包含在字符串中,它应该以反斜杠\字符开头 - 以防止它被解释为字符串的结尾: " Quotation char \"在字符串" 将显示为: Quotation char"在字符串

我的代码如下:

    #include <iostream>

    using namespace std;

    size_t findStringLength (char*);

    int main()
    {
        char n1[] = "Short string";
        char n2[] = "A longer string is used for test purposes";
        char n3[] = "";
        char n4[] = " ";
        int stringlength;


        stringlength = findStringLength("Short string/");

        cout << "Length of " << n1 << " = " << stringlength << endl;

        stringlength = findStringLength("A longer string used for test    purposes/");

        cout << "\nLength of " << n2 << " = " << stringlength << endl;

        stringlength = findStringLength("/");

        cout << "\nLength of " << n3 << " = " << stringlength << endl;

        stringlength = findStringLength(" /");

        cout << "\nLength of " << n4 << " = " << stringlength << endl;

        cout << "\n";

    }

    size_t findStringLength (char string[])
    {
        int i=0;
        while(string[i])i++;
        return i;
    }

编辑我现在有了上面显示的代码,它在一定程度上给出了正确的输出。问题是我收到了这个

错误:H:\ StringLength \ main.cpp:16:警告:不推荐将字符串常量转换为&#39; char *&#39; [-Wwrite串]      stringlength = findStringLength(&#34;短字符串/&#34;);                                                     ^

4 个答案:

答案 0 :(得分:0)

我建议使用简单的while循环:

int string_length = 0;
while (input_str[string_length] != '\0') { string_length++; }

return string_length;

它沿着字符串迭代,直到它遇到空字符。

答案 1 :(得分:0)

该功能可以用很多方式编写。例如

size_t findStringLength( const char *s )
{
    size_t n = 0;

    while ( s[n] != '\0' ) ++n;

    return n;
}

考虑到你为字符数组调用函数(正如你的作业中所描述的那样)。所以你的函数声明

char findStringLength (char);

是错误的,因为参数未声明为字符数组或指向字符数组的第一个元素的指针。你也指定了错误的返回类型。

这两个函数声明是等效的

size_t findStringLength( const char s[] );
size_t findStringLength( const char *s );

答案 2 :(得分:0)

我想回答你的以下疑问

我在从char *转换为char时也收到重复错误。

=&GT;这实际上是你得到的错误,因为你将字符串传递给声明为的函数:

char findStringLength (char);

你传递的实际上是n1,n2等实际上是char类型的数组,而不是字符串本身。你应该阅读更多关于在c ++中传递参数的函数,在这种情况下你必须传递它按值更好地将您的函数声明为:

char findStringLength (char*);

答案 3 :(得分:0)

int findStringLength (char string[])
{
int i=0;
while(string[i])i++;
return i;
}