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