从输入到字符串转换字符

时间:2011-01-17 17:07:13

标签: c++ string int validation

fgetc()用于处理输入的字符 - char by char。 该函数返回输入字符的整数值。

我需要检查一下:

  • 每个城镇不得超过30个字符
  • 每一行都有一个“ - ”(短划线)字符(将整行分成两个城市)

我已经定义了31-int-array和一个用于计算字符的整数。当用户输入“ - ”时,我需要将字符作为字符串保存到另一个数组(实际上是映射)。

printf("Enter route (city - city):\n");

char town[31];
int character, charsOnRow = 0, i = 0;
map<int, string> route;

while (!feof(stdin)) {
    character = fgetc(stdin);
    if (character != '-' && character != '\n') {
        if (charsOnRow < 30) {
            town[charsOnRow] = character;
            charsOnRow++;
        } else {
            printf("Invalid input.\n");
        }
    } else if (route.size() == 0 && character == '\n') {
        printf("Invalid input.\n");
    } else {
        town[charsOnRow] = '\0';
        route[i] = town;
        charsOnRow = 0;
    }
}

所以输入的例子是:

Syracuse - Utica
Binghamton - Syracuse
Binghamton - Utica

我该如何修复它并能够将int-array保存到map<int, string>

3 个答案:

答案 0 :(得分:2)

您有技术错误(无效的C ++)和逻辑错误。

主要原因是执行char-by-char输入的复杂性。

您可能会发现使用C ++级别的i / o更容易:声明一个std::string变量来保存输入的完整,使用std::getline读取它。 / p>

干杯&amp; hth。,

答案 1 :(得分:0)

您需要将town声明为字符数组。目前你将它作为一个字符指针数组。

更改

char * town[31];

char town[31];

答案 2 :(得分:0)

实际上fgetc返回一个int来指示错误条件,如果值是&lt; 0,你有一个错误,否则,你可以简单地将它添加到一个字符串,如:

std::string str;
for(;;)
{
  int ch = fgetc(fp);
  if(ch < 0)
    throw error();

  str += ch;
}

填写字符串时,只需将其添加到地图中: map [yourIntValue] = str;

另外,关于你的代码:char * town [31];

这是一个指针数组,对你的情况来说是正确的: char镇[31];

要将其添加到地图中,您可以简单地使用: map [yourIntValue] = std :: string(town);