【问题标题】:String to store array存储数组的字符串
【发布时间】:2013-04-03 12:52:39
【问题描述】:
if(command=="insert")
{
    int i=0;
    while(i>=0)
    {
        string textToSave[i];
        cout << "Enter the string you want saved: " << endl;
        cin >>textToSave[i];

        ofstream saveFile ("Save.txt");
        saveFile << textToSave;
        saveFile.close();
        i++;
        break;
    }
}

我想将我输入的数组存储到 .txt 文件中。但是我在创建要存储的数组时遇到问题。在whileloop和forloop之间选择我也很纠结,但认为while循环更合适,因为不知道插入单词需要多少时间。请帮忙。谢谢。

【问题讨论】:

  • 是否有一些用户输入会导致代码停止提示输入?
  • 是的,首先这个程序会提示用户输入命令,当用户输入“insert”时,它会运行上面的函数。它会要求用户插入字符串,当用户输入时,它将存储在字符串文件中。如果用户想再次进入,需要再次输入命令“insert”。
  • @user1088346:在这种情况下,如果您只为每个“插入”命令读取一个字符串,那么您根本不需要循环。您需要一个外部循环来读取和处理命令。

标签: c++ arrays string arraylist


【解决方案1】:

您正在尝试存储整个字符串数组,而不仅仅是当前字符串。不知道为什么你需要i 并且有一个数组,因为无论如何你一次只是读取和写入一个字符串。

可能是这样的:

if(command=="insert")
{
    string textToSave;

    cout << "Enter the string you want saved: " << endl;
    cin >>textToSave;

    ofstream saveFile ("Save.txt");
    saveFile << textToSave;
    saveFile.close();

    break;
}

【讨论】:

  • 不断覆盖文件
  • 嗨,Unwind,在此之前,我确实对您提供的解决方案做了完全相同的操作,并且它可以工作,但是当我输入要显示的命令时,它只显示最后一个插入字符串。例如,第一次插入我输入“abcd”第二次插入我输入“qwer”但是当我显示它时只显示“qwer”但abcd消失了。下面是我的“显示”命令,是我的显示命令问题导致的吗?
  • if(command=="display") { ifstream loadFile; loadFile.open("Save.txt", ifstream::in); cout
【解决方案2】:

您遇到的一些最明显的问题是:

  • 在声明 textToSave 时,您使用了名为 variable-length array 的 C99 功能。这不是合法的 C++。
  • 如果可变长度数组声明有效,则在获取用户输入时,您将在最后一个索引之外写入一个
  • 您在每次迭代中打开并覆盖该文件。
  • 你只循环一次,因为你跳出循环,所以无论如何只保存一个字符串。
  • 如果您没有在循环结束时使用break,您将在该条件下永远循环。

【讨论】:

    【解决方案3】:

    在循环之前创建你的数组,否则你会不断创建大小递增 1 的数组。如果你希望每个数组都保存在新文件中,还要更改文件名,否则你会不断覆盖同一个文件。

    string textToSave[string_count];
    if(command=="insert")
    {
    int i=0;
        while(i<string_count)
            {
                cout << "Enter the string you want saved: " << endl;
                cin >>textToSave[i];
    
                ofstream saveFile ("Save"+i+".txt");
                saveFile << textToSave[i];
                saveFile.close();
                i++;
            }
    }
    

    【讨论】:

    • 现在插入看起来不错,但它无法显示我存储的字符串数据。例如,第一次插入“Abcd”第二次插入“qwer”它只显示“qwer”但“Abcd”消失了。不是因为显示功能不对吗? if(command=="display") { ifstream loadFile; loadFile.open("Save.txt", ifstream::in); cout
    • @user1088346 现在你有很多文件,里面有一个字符串(所以如果你想打印==显示它们,你必须加载所有文件并打印内容)。这是你想要的吗?
    • 此外,您还拥有数组 textToSave 中所有文件的所有内容,您可以从中打印
    • 您希望将所有内容保存在一个文件中,还是将每个单词保存在不同文件中?
    【解决方案4】:

    但我无法创建要存储的数组。

    在循环之外,声明一个空向量;这将保存数组:

    vector<string> textToSave;
    

    在循环内部,读取一个字符串并将其附加到数组中:

    string text;
    cin >> text;
    textToSave.push_back(text);
    

    或者,稍微紧凑一点:

    textToSave.push_back(string());
    cin >> textToSave.back();
    

    我也很纠结在 whileloop 和 forloop 之间进行选择

    看起来你根本不想要一个循环,因为你只是在读取一个字符串。您可能需要一个外部循环来读取命令,类似于

    vector<string> textToSave;
    for (;;) { // loop forever (until you reach "break")
        string command;
        cin >> command;
        if (command == "quit") { // or whatever
            break;
        } 
        if (command == "insert") {
            cout << "Enter the string you want saved: " << endl;
            textToSave.push_back(string());
            cin >> textToSave.back();
        }
        // other commands ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多