将字符从输入转换为字符串
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<int, string>
?
【问题讨论】:
您已经声明了一个 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);
【讨论】:
以上是关于将字符从输入转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章