gpt4 book ai didi

c++ - C/C++ 一次读取一行

转载 作者:行者123 更新时间:2023-11-30 20:40:05 28 4
gpt4 key购买 nike

我试图解决某个网站的编程问题,这个网站有以下声明:

读取一个字符串并将其解析为数字,字符“l”可以被视为数字1,字符“o”和“O”可以被视为数字0,逗号和空格将在输入中被接受但被忽略,如果找到任何其他字符则输出错误...

所以...由于行中可能有空格,我使用了 gets (文档说它会删除新行并放置终止符)...

我的 IF 测试序列是否是数字,然后是可接受的字母,然后检查它是否不是逗号或空格...我发现它几乎总是在最后一个 IF 中输入虽然没有任何字符应该引导它到那里,所以我更改了其中的 printf 来打印

 printf("%d error", st[k]);

它输出 13: 回车...我尝试了这个编译器 here

#include <cstdio>
#include <cstring>
#include <cstdlib>

int main()
{
char st[100];
char buf[100];
int k, i;

long long int num;

ops: while(gets(st))
{
for(k = i = 0; st[k]; k++)
if(st[k] >= '0' && st[k] <= '9')
buf[i++] = st[k];
else if(st[k] == 'o' || st[k] == 'O')
buf[i++] = '0';
else if(st[k] == 'l')
buf[i++] = '1';
else if(st[k] != ',' && st[k] != ' ')
{
printf("error\n");
goto ops;
}
// remaining code comes here...

}

输入样本具有以下优点:

lo6234,657

嗨,,,,,5,,5, 4

220亿

00

我应该使用其他函数来代替阅读吗?

关于如何避免这种该死的回车符有什么建议吗?

问题的说明可见here如果你想了解更多细节谢谢

编辑:

我这么问是因为我使用的编译器和网站使用的编译器之间似乎存在差异,一旦我提交了一个代码,该代码没有在我的代码上生成正确的输出,但我认为该代码是正确的...并且它通过了。然后,我在 Linux 虚拟机上尝试了代码,也正确,但我在 Windows 上的 gcc 失败了......有些字符完全偏离了应有的位置

事情是:

最佳答案

行输入的首选方法是getline。如果您事先不知道输入的宽度,如果您将缓冲区指针设置为 NULL,则 getline 将为您分配空间。

由于您表明您有一定的 C 经验,因此以下内容将向您展示如何单步执行输入字符串并以您想要的方式解析它。虽然有很多方法可以处理解析字符串,但很难将指针分配给字符串的开头,然后沿着字符串向下前进,直到到达空终止字符(unsigned 0,或字符“\0”)。如果您在查看后有任何疑问,请询问:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]) {

char *buffer = NULL;
size_t n = 0;
ssize_t len;
char *ptr = NULL;
char *output = NULL;
int idx = 0;

printf ("\nEnter your string below: ([ctrl + d] on blank line to end)\n");

while ((len = getline (&buffer, &n, stdin)) != -1) {
ptr = buffer;
idx = 0;
output = malloc (sizeof (char) * len);

while (*ptr != 0) {
if (*ptr >= 48 && *ptr <= 57) output [idx++] = *ptr;
if (*ptr == 'I') output [idx++] = '1';
if (*ptr == 'o' || *ptr == 'O') output [idx++] = '0';
ptr++;
}

output [idx] = 0;

printf ("\n valid output: %s\n\n", output);

free (output);
}


return 0;
}

输出:

Enter your string below:     ([ctrl + d] on blank line to end)
This sting has 12345 aeiou AEIOU,,,,,commas, and 99, to end.

valid output: 123450100990

关于c++ - C/C++ 一次读取一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24338230/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com