在c ++中查找C样式char *字符串的长度

时间:2016-12-01 19:00:07

标签: c++ c++11 pointers

该程序的目的是反转字符串并将其打印出来。这是一项学校作业,我刚刚开始学习。我需要反转给我的字符串(整个main函数是为赋值而给出的)我需要通过使用2个指针来表示cstring的开头和cstring的结尾。在代码中,我知道传递的cstring的开头只是" temp"但我不知道如何找到cstring的结束字母并指定它的指针。

主要功能是给我的:

#include <iostream>
#include "reverse.hpp"

using namespace std;
void reverse(char*);

int main()
{
    // these are the test cases
    char str1[] = "time";
    char str2[] = "straw";
    char str3[] = "deliver";
    char str4[] = "star";
    char str5[] = "knits";

    cout << "The strings before reversing: " << endl;
    cout << str1 << " " << str2 << " " << str3 << " " << str4 << " " << str5 << " " << endl;

    reverse(str1);
    reverse(str2);
    reverse(str3);
    reverse(str4);
    reverse(str5);

    cout << "The strings after reversing: " << endl;
    cout << str1 << " " << str2 << " " << str3 << " " << str4 << " " << str5 << " " << endl;

    return 0;

}

这是反向功能:

#ifndef REVERSE_HPP
#define REVERSE_HPP
#include <string.h>

void reverse(char*temp)
{
    // *temp would equal "t" in the first cstring
    // (sizeof *temp - 1) would equal last character ???

}

#endif // REVERSE_HPP

这与发布的其他内容不同,因为我试图用指针获取长度

3 个答案:

答案 0 :(得分:1)

无法通过指针查找数组的长度。但是你的数组是从字符串文字初始化的,c和c ++中的字符串有一种特殊的存储方式,可以让你确定它的长度。

字符串被定义为一系列非null字符后跟一个null字符,因此要查找字符串的长度,您只需遍历字符,直到找到{ {1}},像这样

'\0'

您当然可以使用c标准库提供的size_t length = 0; while (str[length] != '\0') ++length; 函数,该函数位于 string.h 标题中。

答案 1 :(得分:1)

仅为完整性

void reverse(char*temp)
{
    int l = strlen(temp);
  .....
}

要获得额外的功劳,请使用c ++字符串重新实现整个任务(主要),这是你应该在c ++中使用的。还要将字符串放在向量中而不是n个单独的变量中。

叹息 - 我看到其他人已经为你做了第一个。你仍然可以在std :: string而不是c_str()上使用反向函数。请注意,c ++有一个oneliner可以反转字符串 - 找到额外的额外信用

答案 2 :(得分:0)

在c ++中,您想使用std :: string

#include <string>
#include <iostream>
#include "reverse.hpp"

using namespace std;

// why the declaration here?
// (I would presume this goes in "reverse.hpp" ?)
void reverse(std::string& str);

int main()
{
  string str1 = "time";
  string str2 = "straw";
  string str3 = "deliver";
  string str4 = "star";
  string str5 = "knits";

  cout << "The strings before reversing: " << endl;
  cout << str1 << " " << str2 << " " << str3 << " " << str4 << " " << str5 << " " << endl;

  reverse(str1);
  reverse(str2);
  reverse(str3);
  reverse(str4);
  reverse(str5);

  cout << "The strings after reversing: " << endl;
  cout << str1 << " " << str2 << " " << str3 << " " << str4 << " " << str5 << " " << endl;

  return 0;
}

别忘了改变

reverse(const char*);

要     reverse(std :: string&amp;);

std::string非常易于使用,与指针不同,它可以满足您的所有需求。