Visual c++ 将单个单词和带下划线的单词组放入数组中

Visual c++ 将单个单词和带下划线的单词组放入数组中,visual-c++,mfc,parallel-processing,Visual C++,Mfc,Parallel Processing,我有一个程序,可以迭代文本,将单词和带下划线的单词组放入数组中……代码如下: //loop for all text in rich edit control for(int i = 0; i < text.GetLength(); i++) { rEditCtrl.SetSel(i, i + 1); //from start to end character rEditCtrl.GetSelectionCharFormat(cf); if(cf.dwEf

我有一个程序,可以迭代文本,将单词和带下划线的单词组放入数组中……代码如下:

    //loop for all text in rich edit control
for(int i = 0; i < text.GetLength(); i++)
{
    rEditCtrl.SetSel(i, i + 1); //from start to end character
    rEditCtrl.GetSelectionCharFormat(cf);

    if(cf.dwEffects & CFE_UNDERLINE) //check whether underline character
    {
        if(!groupMode) {
            groupMode = true;
        }

        isSpace = false;

        if(!word.IsEmpty()) {
            std::pair <CString,bool> group;
            group = std::make_pair(word,false);
            groups.push_back(group);
            word = "";
        }

        underlined = underlined + rEditCtrl.GetSelText();

    }
    else {
        if(groupMode) {

            rEditCtrl.SetSel(i, i + 1); //from start to end character
            if(rEditCtrl.GetSelText() == " ") {
                underlined = underlined + rEditCtrl.GetSelText();                           
            }
            else {
                word = word + rEditCtrl.GetSelText();
            } 
                groupMode = false;



                if(!underlined.IsEmpty()) {
                    std::pair <CString,bool> group;
                    group = std::make_pair(underlined,true);
                    groups.push_back(group);
                    underlined = "";
                }


        }
        else {
            if(!isSpace) {
                rEditCtrl.SetSel(i, i + 1); //from start to end character

                if(rEditCtrl.GetSelText() == " ") {
                    isSpace = true;                  
                }
                else if(rEditCtrl.GetSelText() == "\r") {
                    if(!word.IsEmpty()) {
                        std::pair <CString,bool> group;
                        group = std::make_pair(word,false);
                        groups.push_back(group);
                        word = "";
                    }
                }
                else {
                    if(word == "\r") {
                        std::pair <CString,bool> group;
                        group = std::make_pair(word,false);
                        groups.push_back(group);
                        word = "";
                    }
                }
                word = word + rEditCtrl.GetSelText();


            }
            else if(isSpace) {
                rEditCtrl.SetSel(i, i + 1); //from start to end character

                if(rEditCtrl.GetSelText() != " ") {
                    isSpace = false;

                    if(!word.IsEmpty() && !AllSpaces(word)) {
                        std::pair <CString,bool> group;
                        group = std::make_pair(word,false);
                        groups.push_back(group);
                        word = "";
                    }

                }

                word = word + rEditCtrl.GetSelText();
            }
        }
    }
}
//丰富编辑控件中所有文本的循环
对于(int i=0;i

我想知道是否有一种明显的方法可以提高我所缺少的代码的效率,或者我是否可以使用并行性来提高速度……如果并行性是一种方法……我将如何解决这个问题?我只能想到把课文分成两部分,从开头和结尾开始,在中间相遇。你觉得怎么样

循环命令中有一个小错误。它必须为(inti=0;i)-1我会找出处理器内核的数量,将字符串精确地拆分为这个数量的部分,并相应地启动工作线程。但是优化单个富编辑控件处理对我来说似乎有点过头了。我会尝试在代码的另一个点上做一些调整。首先是Thomiel,感谢您的回复。为什么这是循环通信中的一个错误还有?也就是说,你能解释一下减1的目的吗?其次,为并行性优化上面的代码是否会提高性能?我之所以考虑走这条路,是因为代码中的其他地方运行良好……这只是程序的一个特定功能(涉及上面的代码),使用时运行缓慢。哦,不,我错了。抱歉。我宁愿尝试找到此功能的解决方法,而不是依靠纯马力来加快速度。您可以尝试禁用重画,以便选择的连续移动不会导致每次重画丰富的编辑。