我有这个功能,编译器对我说“无法将字符串转换为const char”。
void
DramaticLetters(string s, short TimeLength)
{
for(int i = 0, sLen = strlen(s); i < sLen; i++){
cout << s[i];
Sleep(TimeLength);
}
}
strlen有问题,我想
答案 0 :(得分:4)
strlen()
适用于C const char*
个字符串。要获取字符串s
的长度,请使用s.size()
或s.length()
。如果您想从string
获取C字符串,请使用s.c_str()
。
虽然C ++使似乎 const char*
和string
可以互换,但只有在将const char*
转换为string
时才会采用一种方式。< / p>
您也没有理由要使用strlen
。 strlen
很可能是使用循环定义的,它永远不会像size()
那样有效,而string
最有可能只是string
类的长度属性的getter。在调用没有C ++替代的C函数时,只将{{1}}转换为C字符串。
答案 1 :(得分:1)
您不应该混合使用C和C ++字符串函数。而不是strlen()
(C风格的函数),请使用string::size()
:
for(int i = 0, sLen = s.size(); i < sLen; i++) {
cout << s[i];
Sleep(TimeLength);
}
这里有一个reference,其中包含string
类的所有方法。
答案 2 :(得分:1)
正如克里斯在评论中所说,strlen用于const char *
,而你传递的是string
。而不是
for(int i = 0, sLen = strlen(s); i < sLen; i++){
cout << s[i];
Sleep(TimeLength);
}
使用此:
for(int i = 0, sLen = s.length(); i < sLen; i++){
cout << s[i];
Sleep(TimeLength);
}
答案 3 :(得分:0)
strlen
在char const *
上运作。如果您真的想要,可以strlen(s.c_str())
,但std::string
有很多功能,包括length()
方法,它返回字符串中的字符数
答案 4 :(得分:0)
几点评论:
您不修改函数中的字符串,因此最好将const引用传递给它(const string&amp; s)
字符串本身定义了获取其长度的方法 - s.size()和s.length()都可以。另外的好处是这种方法在复杂性方面是恒定的,而不是strlen的线性复杂性
如果您真的想使用strlen,请使用s.c_str():strlen(s.c_str())