为家庭作业分配我的任务是创建一个程序,该程序接受一个字符串,该字符串格式化所有单词放在一起,而不是空格,并分隔单词。
有点难以解释,但我的意思是字符串“StopAndSmellTheRoses”必须转换为“停止并闻到玫瑰”,注意这句话的第一个字母是如何大写的,这是另一个要求。 / p>
我的想法是创建一个函数,使用ASCII代码表在字符串中搜索大写字母,当找到一个函数时,我将该大写字母前面的字母添加到一个新字符串中。我正在使用嵌套循环来尝试创建它,但是我遇到了“DEBUG ASSERTION FAILED!”每次出现错误信息。
这只是我到目前为止编写的这个程序的开始,我觉得我的想法没有被正确地翻译成代码(我基本上意味着我几乎不知道如何将这些想法转化为实际的代码)。
到目前为止,我有:
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
void strConvert(string);
int main()
{
string myStr = "StopAndSmellTheRoses";
strConvert(myStr);
system("pause");
return 0;
}
void strConvert(string myStr)
{
string newStr;
for (int i = 1; i <= sizeof(myStr); i++)
{
if (myStr[i] > 'A' && myStr[i] < 'Z')
{
for (int j = 1; j < i; j++)
{
newStr += myStr[j];
}
tolower(myStr[i]);
newStr += '\n';
}
}
cout << newStr;
}
我不确定我将myStr的字母“添加”到newStr的方法是否有效,但这就是我一直在玩的东西。谁能帮助我弄清楚如何让我的功能运行?我知道我可能有很多错误,请理解我是c ++的新手。
谢谢!
答案 0 :(得分:1)
您的索引超出范围:
for (int i = 1; i <= sizeof(myStr); i++)
应该是
for (int i = 0; i < myStr.size(); i++)
c ++中的索引从0
转到size -1
。
sizeof(myStr)
给出了数据类型的大小,这与std::string()
的值大小不同。
Here's the completely fixed sample
void strConvert(std::string& myStr)
{
std::string newStr;
for (size_t i = 0; i < myStr.size(); i++)
{
if (i > 0 && myStr[i] >= 'A' && myStr[i] <= 'Z')
{
newStr += ' ';
}
newStr += std::tolower(myStr[i]);
}
myStr = newStr;
}
答案 1 :(得分:0)
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
string strConvert(const string &s)
{
string newStr;
if(!s.empty())
{
string::const_iterator it=s.cbegin();
newStr.push_back(*it);
while(++it!=s.cend())
{
if(*it>='A' && *it<='Z') newStr.push_back(' ');
newStr.push_back(tolower(*it));
}
}
return newStr;
}
int main()
{
string myStr = "StopAndSmellTheRoses";
cout << strConvert(myStr) << endl;
return 0;
}