将字符从输入转换为字符串

Posted

技术标签:

【中文标题】将字符从输入转换为字符串【英文标题】:Casting chars from input to string 【发布时间】:2011-01-17 17:07:12 【问题描述】:

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

我需要检查这些:

每个城镇不得超过 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&lt;int, string&gt;

【问题讨论】:

您已经声明了一个 char 指针数组。我不认为那是你想要的 【参考方案1】:

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

其中一个主要原因是逐字符输入的复杂性。

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

干杯,

【讨论】:

【参考方案2】:

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

改变

char * town[31];

char town[31];

【讨论】:

【参考方案3】:

其实fgetc返回一个int表示错误情况,如果值

std::string str;
for(;;)

  int ch = fgetc(fp);
  if(ch < 0)
    throw error();

  str += ch;

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

另外,在您的代码上:char * town[31];

这是一个指针数组,您的情况正确的是: 炭镇[31];

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

【讨论】:

以上是关于将字符从输入转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将特定字符从字符串转换为int(C)

从键盘获取字符,字符大小写转换

将字符串数组转换为整数数组

如何从输入字符串中分离整数并将它们转换为 int 类型以允许对它们进行计算

如何将输入的数字字符串转换为 int 数组?

将字符串转换为数组后从字符串中删除特定项目