【问题标题】:Find the length of string array with strlen()使用 strlen() 查找字符串数组的长度
【发布时间】:2013-02-01 21:03:23
【问题描述】:

我一直试图找到string 的长度,它有一个chars 数组和strlen() 函数,但它不起作用。 我使用的代码是这样的:

string s[]={"a","b","c"};
int len = strlen(s.c_str());

它会产生以下错误:

"request for member âc_strâ in âwArrayâ, which is of non-class type"

但是当我之前像这样在strings 上使用过这个strlen() 函数时,它工作得很好:

fin.open("input.txt");
string tempStr;
getline(fin, tempStr,'\n');
int len = strlen(tempStr.c_str());

我在这里缺少什么?我知道我可以用

找到string s[] 的长度
int size = sizeof( s ) / sizeof( s[ 0 ] );

但是为什么我不能使用strlen()。有人可以解释发生了什么吗?

【问题讨论】:

  • s 是一个数组,它没有c_str 函数。 std::vector 是一个选项吗?
  • 您错过了std::string 不是std::string[] 的事实。
  • @Billz 但它适用于 char 类型数组....????????????/
  • @n.m.那为什么它在 tempStr 上起作用。那也是一个字符串。
  • 字符串不同于字符串数组。

标签: c++ string string.h


【解决方案1】:

使用辅助函数模板很容易找到任何类型的固定大小数组的长度:

#include <cstddef> // for std::size_t

template< class T, size_t N >
std::size_t length(const T (&)[N] )
{
  return N;
};

string s[]={"a","b","c"};
std::cout << length(s) << std::endl;

在 C++11 中,函数为 constexpr

关于strlen,它计数chars,直到找到一个空终止字符\0。当你调用std::string'sc_str() 方法时,你会得到一个指向空终止字符串中第一个char 的指针。

【讨论】:

  • @juanchopanza 谢谢.. 但我真的需要知道为什么 strlen() 在 tempStr 而不是 string 上工作。 (参见 tempStr 和 s 的代码)
  • @AlexChamberlain 我一时想不起来std::size_t 需要哪个标头。现已修复。
  • @DeadCoder 我添加了一些关于strlen的内容。
【解决方案2】:

一种 C++ 方法是使用 std::vector

vector<string> ss;

ss.push_back("a");
ss.push_back("b");
ss.push_back("c");

cout << ss.size(); // number of strings in your vector : 3

您还可以访问每个字符串:

cout << ss[0].size(); // 1

【讨论】:

    【解决方案3】:

    一定是这样的:

    string s[]={"a","b","c"};  //array of string
    for(auto i:s){
    int len = strlen(i.c_str());  because you need to convert one string to c type string
    cout<<len<<" ";
    }
    

    获取数组长度:

    std::array<int> nums {1, 3, 5, 7};
    
    std::cout << "nums contains " << nums.size() << " elements.\n";
    

    http://en.cppreference.com/w/cpp/container/array/size

    strlen() 接受 ctype 字符串。和 c_str()string(STL) 转换为 strlen 接受的 ctype 字符串(空终止)。

    【讨论】:

    • @Arpit 当然是1,数组的每个元素的长度都是1。
    • 所以这是意料之中的。
    • @juanchopanza 我们了解问题。不同。你在数组上工作,我在单个字符串上工作。
    • 抱歉,该评论是针对@DeadCoder 的。
    • @juanchopanza 最后一件事。 ctype string 和 string 有什么区别???
    【解决方案4】:

    strlen 的定义:size_t strlen ( const char * str ),注意输入参数的类型。 你定义字符串 s[]={"a","b","c"};这是一个数组,所以下面的语句会起作用: strlen(s[0].c_str()); 另外,为了计算 array s 的长度,sizeof(s) / sizeof(s[0]) 仅在 's' 的每个元素具有相同长度时才有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-11
      • 2013-12-09
      • 2011-05-08
      • 1970-01-01
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多