使用C ++中的字符串搜索程序遇到问题

时间:2016-04-03 20:25:33

标签: c++

为家庭作业分配我的任务是创建一个程序,该程序接受一个字符串,该字符串格式化所有单词放在一起,而不是空格,并分隔单词。

有点难以解释,但我的意思是字符串“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 ++的新手。

谢谢!

2 个答案:

答案 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;
}