【发布时间】:2021-01-14 17:57:02
【问题描述】:
我有一个小程序可以打印出单词的每个字母的大写形式,但是当我编译它时我得到错误有符号/无符号不匹配,因为我在这个程序中将 cstring 作为普通 string 传递.如何正确传递它以便我仍然可以使用text.length()?这是我得到的错误“Tester.cpp(22,23): warning C4018: 'for (int i = 0; i < text.length(); i++)
#include <iostream>
using namespace std;
string capitalizeFirstLetter(string text);
int main() {
char sentence[100];
for ( ; ; )
{
cin.getline(sentence, 100);
if (sentence != "0")
capitalizeFirstLetter(sentence);
}
return 0;
}
string capitalizeFirstLetter(string text) {
for (int i = 0; i < text.length(); i++)
{
if (i == 0)
{
text[i] = toupper(text[i]);
}
if (text[i] == ' ')
{
++i;
text[i] = toupper(text[i]);
}
}
cout << text;
return text;
}
【问题讨论】:
-
您可以使用
std::string::c_str(),但只有在这种情况下才能通过strlen()获取长度(或者您也将其作为参数传递)。为什么不将sentence设为std::string并在第一名使用std::getline(cin,sentence)? -
为什么不使用 string::size_type 作为 i 而不是 int 的类型?
-
编译器警告意味着您为
i使用了错误的类型,而不是您错误地传递了字符串。i应该是size_t或(相同的)string::size_type。
标签: c++ string user-defined-functions c-strings