【问题标题】:Input string array one character at a time输入字符串数组,一次一个字符
【发布时间】:2016-04-30 09:11:57
【问题描述】:

我遇到了一个问题,我需要从文本文件中加载数据,然后将其保存到 string 类型的数组中。我的方法是将数组视为二维数组,但属于char 类型。

这是我的代码:

string *rollno;
rollno=new string[2];
string line;

ifstream in("file.txt",ios::app);

int i=0;
char single;
in.get(single);

while (single != '.') {
    for (int j=0; single!=',' || single!='.'; j++) {
        rollno[i][j]=single;\\saving in array character wise
    }

    in.get(single);\\getting the next line 
    i++;
}

cout<<rollno[0]<<endl<<rollno[1];\\checking

谁能帮我弄清楚我做错了什么?

【问题讨论】:

  • 你有什么问题?
  • 文件的内容是什么?如果将i 增加到超过1(这是rollno 的顶部索引)怎么办?或者,如果您对 empty 字符串使用任何索引会怎样?
  • @RSahu 我需要制作一个学校管理系统,我需要从文件中输入。
  • @joachimPileborg 该文件包含学生的详细信息,格式如下:卷号、名字、姓氏、年龄、城市。目前我正在选择 2 号进行测试。我使用的文件只有两个学生的数据。
  • 您有点错过了我评论的重要部分,即索引空字符串将超出范围。如果字符串为空,则 any 索引将超出范围。

标签: c++ arrays string char file-handling


【解决方案1】:

嗯...不完全确定您要做什么,但从外观上看,这不是您要找的吗?

(假设i 是数组索引,j 代表std::string.operator[],看起来就是这样。)

// ...

while (single != '.') {
    while (single != ',' && single != '.') {
        rollno[i] += single; // appending to string.
    }

    in.get(single); //getting the next line 
    i++;
}

您可以将char 附加到带有operator+=std::string,如here 所述。

另外,如果我错了,请纠正我,但(single != ',' || single != '.') 将始终评估为真;如果single == ',',则single != '.',反之亦然。如果您希望它在遇到任一分隔符时停止处理,则使用逻辑 AND 确保在任一检查失败时停止处理。

(对于我可能遗漏的任何错别字或错误,我们深表歉意。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多