如何在C ++中查找字符串的长度

时间:2015-02-03 05:37:33

标签: c++

我正在编写一个程序,我需要编写一个返回字符数并以字符串间隔的函数。我有一个用户写的字符串(mystring),我希望函数返回字符串中确切数量的字母和空格,例如" Hello World"应该返回11,因为有10个字母和1个空格。我知道string :: size存在但是这会返回以字节为单位的大小,这对我没用。

4 个答案:

答案 0 :(得分:2)

我不确定您是否希望字符串的长度为字符,或者您只想计算字母和空格的数量。

没有特定的功能可以让你只计算字母和空格,但是你可以非常简单地获得字母和空格的数量(并忽略所有其他类型的字符):

#include <string>
#include <algorithm>
#include <cctype>    
int main() {
  std::string mystring = "Hello 123 World";
  int l = std::count_if(mystring.begin(), mystring.end(), [](char c){ return isspace(c) || isalpha(c); });
  return 0;
}

否则,除非您使用非ascii字符串,std::string::length应该适合您。

一般来说,它不是那么简单,如果你认为一个字节不一定意味着一个字符,那么你就是对的。但是,如果您只是在学习,那么您不必处理unicode和随之而来的肮脏。现在你可以假设1个字节是1个字符,只知道它通常不是真的。

答案 1 :(得分:1)

您的首要目标应该是确定字符串是ascii编码还是以multi-byte格式编码。

对于ascii string::size就足够了。您也可以使用字符串的length属性。

在后一种情况下,您需要找到number of bytes per character

答案 2 :(得分:1)

您应该使用string::size获取数组的大小(以字节为单位),然后将其除以该字符串元素的大小(以char为单位)。

看起来像是:int len = mystring.size() / sizeof(char);

只需确保包含iostream,即包含std :: sizeof。

的头文件

答案 3 :(得分:-1)

您可以创建自己的函数来获取C ++中字符串的长度(对于std :: string)

#include <iostream>
#include <cstring>

using namespace std;
int get_len(string str){
   int len = 0;
   char *ptr;
   while(*ptr != '\0')
  {
     ptr = &str[len];
     len++;
   }
   int f_len = len - 1;
   return f_len;
}

要使用此功能,只需使用:

get_len("str");