【问题标题】:I need help in c++ change cases我需要 C++ 变更案例的帮助
【发布时间】:2021-12-13 17:00:01
【问题描述】:
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string sentence =""; 
    cin >> sentence; //aab
    int i;
    
    for (i=0;i=sentence.length();i++){ 
        if (i<=65 && i>=90) {
            sentence = sentence[i] + 32;
        }
        else if (i<=97 && i>=122){                //i=0,
            sentence = sentence [i]-32;
        }
        
        
    }

    cout << sentence;
    return 0;
}

当我输入此代码以更改字母大小写时,尽管代码中只有一个 cin,但它一直要求我输入更多,为什么会发生这种情况?

【问题讨论】:

  • cin &gt;&gt; sentence; //aab 是一个错误,如果您希望句子中有空格。这是一个错误,因为该语句将读取到第一个空白字符,而忽略输入的行的其余部分。
  • string sentence =""; = "" 部分是不必要的。 string sentence; 就足够了。
  • 不相关,但使用 std::islower/std::isupperstd::tolower/std::toupper 而不是幻数。
  • 没有数字既是&lt;=65 &gt;=90,也不是&lt;=97 &gt;=122。你的意思是&gt;= 65&lt;= 90&gt;= 97&lt;= 122。 (你看到std::isupperstd::islower 有多大帮助了吗?)
  • 顺便说一句。在您的if 语句中,您正在检查索引i,而您肯定想在索引i 处检查sentence 的内容。

标签: c++ loops if-statement uppercase letter


【解决方案1】:

问题一是无意分配。看看你的循环条件:

for (i=0;i=sentence.length();i++)

这会分配i 而不是比较它,从而导致无限循环。使用&lt; 而不是=

for (i=0; i < sentence.length(); i++)

问题二是您将字符串中的位置与字符范围而不是字符本身进行比较,并且比较是向后的并且永远不会是真的:

if (i<=65 && i>=90)

应该是:

if (sentence[i] >= 65 && sentence[i] <= 90)

小写范围相同。

最后,你不想把整个句子改成一个字符,就是那个字符:

sentence = sentence[i] + 32;

应该是:

sentence[i] = sentence[i] + 32;

同样,小写范围也是如此。

通过这些更改,它似乎有效,至少对于单个单词。如果你想做整个句子,我建议使用std::getline(std::cin, sentence); 而不是cin &gt;&gt; sentence;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2011-10-07
    • 2016-02-11
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    相关资源
    最近更新 更多