为什么不起作用?

时间:2018-08-12 09:08:40

标签: c++ if-statement while-loop compilation

我想创建一个程序,将相同的单词转换为一个单词。我在使用“ while”的地方遇到了代码问题。如果我用“ if”代替“ while”,但是它不如我所愿,所以我需要使用“ while”,但它不能正常工作。它可以编译,但是在输入字符串a之后不起作用。

#include <iostream>

using namespace std;

int main ( ) {
    string a;
    cout << "Введите string a: ";
    getline(cin,a);
    for (int i = 0; i < a.length(); i++) {
        while (a[i]=a[i+1]) {
            for (int z = i; z < a.length(); z++) {
                a[z]=a[z+1];
            }
        }
    }
    cout << endl << a << endl;
}

3 个答案:

答案 0 :(得分:2)

 while (a[i]=a[i+1]) {

您可能是说

while (a[i]==a[i+1]) {

=是分配; ==是比较。

完成编译时,传递-Wall以获得有关此类情况的警告。 (如果Microsoft编译器打开警告可能会有所不同;对于其他编译器,-Wall的意思是“打开警告:所有正常警告”。)

答案 1 :(得分:0)

即使我将while替换为if时,它仍然无法按预期工作。令您惊讶的是,您能够使用getline而无需字符串标题。您还要将字符串a的前一个字符分配给a的下一个字符。

请尝试以下操作:

#include <iostream>
#include<string>
#include<vector>

using namespace std;

int main()
{
    vector<string> dupes;
    string word;
    string a;
    cout<<"Enter line:";
    getline(cin , a);
    int i = 0; //the counter
    while(i <= a.length()) {
       if(!isspace(a[i])) {
            word += a[i];
       } if(isspace(a[i])) {
           bool present = (find(dupes.begin() , dupes.end() , word) != dupes.end());
            if(!present) {
                dupes.push_back(word);
                word = "";
            }
            word = "";
       }
       ++i;
    }
}

尽最大可能避免循环嵌套。

答案 2 :(得分:0)

我解决了!

#include <iostream>

using namespace std;

int main ( ) {
    setlocale(LC_ALL,"Russian");
    cout << "Сборник задач: 7.2" << "\nLv Easy" << "\nExercise #02" << endl << endl;
    string a;
    cout << "Enter a line: ";
    getline(cin,a);
    for (int i = 0; i < a.length(); i++) {
        for (int j = 0; j < a.length(); j++) {
            if (a[i]==a[i+1]) {
                for (int z = i; z < a.length(); z++)
                    a[z]=a[z+1]; } } }
    cout << endl << a << endl << endl;
}