获取for循环以完成其迭代(简单)

时间:2013-09-18 14:15:16

标签: c++ string for-loop

我正在编写一段代码,以便在完全停止后大写字母,但由于某种原因,每次我测试它时,当我在命令提示符中键入内容时,程序在我按下返回键后停止。非常感谢任何帮助。我知道循环在被破坏之前是无限的,我们的想法是大写过程将继续,直到满足循环被破坏的条件。

                if ((text.empty() != 1 ) && (text.at(text.size() - 1) != '!' ) && (text.at(text.size() - 1) != '?') && (text.at(text.size() - 1) != ':' ) && (text.at(text.size()-1 ) != ',' ) && (text.at(text.size() - 1 ) != ';' ) && (text.at(text.size() -1 ) != '=' ) && (text.at(text.size() -1 ) != '-' ) && (text.at(text.size() -1 ) != ')' ) && (text.at(text.size() -1 ) != '}' )  )
        {
            for (i = 0 ;  i >= 0 ; i++)
        {
            text.append("kk") ;
            if (text.find("." , j) < 0 )
                {
                    text.erase(text.size() - 1, 2) ;
                    text2.append(text) ;
                    writer << text2 << endl ;
                    text2.clear() ;
                    j = 0 ;
                    break ;
                }
                else
                {
                    j = text.find("." , j) + 1 ; 
                    k = j + 1;
                    letter = static_cast <int> ( text.at(k) ) ;
                    if (( letter < 123 ) && ( letter > 96 ))
                        {
                            letter = (letter - 32) ;
                            (text.at(k)) = static_cast <char> (letter) ;
                            text.erase(text.size() - 1, 2) ;
                        }
                    else 
                        {
                            text.erase(text.size() - 1, 2) ;
                            continue ; 
                        }
                }
        }
        }
        else 
        if (text == "")
        {
            text2.append("\n") ;
            writer << text2 << endl ;
            text2.clear() ;
        }
        else 
        {
            text2.append(text) ;
            writer << text2 << endl ;
            text2.clear() ;
        }
    }

2 个答案:

答案 0 :(得分:0)

你的循环会持续一段时间,增加j

然后,在这一行:

        j = text.find("." , j) + 1 ;

text.find返回-1,因此j变为零,所以你的循环重新开始。

答案 1 :(得分:0)

一些提示。

使用autoformatting。在我把它扔进vim之前你的格式已经遍布整个地方了。它有助于发现错误。

第二,

if ( (text == "end") || (text == "End") || (text == "ENd") || (text == "END") ) 

使用tolower方法或toupper方法对不区分大小写进行比较。

if (text == "19823717")

你似乎正在使用它作为一个神奇的数字来检测第一次循环。而是将此逻辑移出循环。

if ( (text == "end") || (text == "End") || (text == "ENd") || (text == "END") ) 
  {
    writer.close() ;
    cout << "End of session" << endl ; break ;
  }
  else 
    if (...

这里的其他人让我害怕。它可能没有做你想要的。将它包装在{}s

中可能要好得多
letter = static_cast <int> ( text.at(k) ) ;

你不需要这个演员表。 char可以直接视为数字。例如char a = 97;

if (( letter < 123 ) && ( letter > 96 ))

改为使用toupper

除此之外。我不知道你的问题究竟是什么。当你清理这些其他问题时,这可能是一个微妙的逻辑错误。