标签: formatted-input

C#相当于C sscanf

可能重复:
.NET中有'sscanf()'吗?

C中的sscanf是从字符串中读取格式良好的输入的好方法.

如何实现这个C#.

例如,

int a,b;
char *str= "10 12";
sscanf(str,"%d %d",&a,&b);
Run Code Online (Sandbox Code Playgroud)

上面的代码将10分配给a和12分配给b.

如何使用C#实现相同的目标?

c c# string formatted-input

25
推荐指数
4
解决办法
4万
查看次数

有没有人真正使用流提取操作符?

我写了很多operator<<(std::ostream &, const T &)函数 - 它们非常有用.

我从来没有operator>>(std::istream &, T &)在实际代码中编写函数,甚至没有使用内置类型的提取运算符(好吧,也许是std::string).这些仅适用于简短的示例程序和教科书吗?是operator>>C++的失败功能吗?

有人提出有关安全地重载流操作符的问题.我想知道是否有人在实践中这样做.

即使对于像C++文件中读取输入这样的简单内容我也无法建议使用operator>>.编写在检测和处理输入错误(或者我不知道如何)中的健壮代码是非常困难的.

如果您不同意,请展示一个使用的好例子operator>>- 也许通过回答我链接到的最后一个问题.


总结:感谢大家的回复,很多好的意见.曼努埃尔的回答让我重新考虑我不愿意使用,op>>所以我接受了那个.

c++ iostream formatted-input

21
推荐指数
2
解决办法
7292
查看次数

C++格式化输入:如何"跳过"令牌?

假设我有这种格式的输入文件:

VAL1 VAL2 VAL3
VAL1 VAL2 VAL3
Run Code Online (Sandbox Code Playgroud)

我正在编写一个只对VAL1和VAL3感兴趣的程序.在C中,如果我想"跳过"第二个值,我会这样做:

char VAL1[LENGTH]; char VAL3[LENGTH];
FILE * input_file;
fscanf(input_file, "%s %*s %s", VAL1, VAL3);
Run Code Online (Sandbox Code Playgroud)

意思是,我使用"%*s"格式化程序使fscanf()读取此标记并跳过它.我如何用C++的cin做到这一点?有类似的命令吗?或者我必须读取虚拟变量?

提前致谢.

c++ formatted-input

20
推荐指数
2
解决办法
5141
查看次数

当数据有空格时,用C++的流运算符>>读取格式化数据

我有以下格式的数据:

4:How do you do?
10:Happy birthday
1:Purple monkey dishwasher
200:The Ancestral Territorial Imperatives of the Trumpeter Swan

数字可以是1到999之间,字符串最多255个字符.我是C++的新手,似乎有些消息来源建议使用流的>>运算符提取格式化数据,但是当我想提取字符串时,它会停留在第一个空白字符处.有没有办法配置流只停止在换行符或文件结束时解析字符串?我看到有一种getline方法可以提取整行,但是我仍然需要手动将其拆分[有find_first_of],不是吗?

是否有一种简单的方法可以仅使用STL以此格式解析数据?

c++ stl stream formatted-input

13
推荐指数
3
解决办法
5185
查看次数

将scanf与正则表达式一起使用

我一直在尝试在scanf上使用正则表达式,以便读取最多n个字符的字符串并丢弃其他任何内容,直到新行字符.任何空格都应被视为常规字符,因此包含在要读取的字符串中.我研究了维基百科有关正则表达式的文章,但我无法让scanf正常工作.这是我尝试过的一些代码:

scanf("[ ]*%ns[ ]*[\n]", string);
Run Code Online (Sandbox Code Playgroud)

[]应该用于实际的空格字符,*应该表示一个或多个,n是要读取的字符数,string是用malloc分配的指针.我尝试了几种不同的组合; 但是我倾向于只获得一个句子的第一个单词(停留在空格中).此外,*似乎丢弃一个字符而不是意味着"零或更多"......

任何人都可以详细解释scanf如何解释正则表达式?更重要的是,重复使用getc是否有效?

提前致谢

c unix expression scanf formatted-input

7
推荐指数
1
解决办法
2万
查看次数

如何使用istringstream提取混合格式

为什么我的程序没有输出:

10
1.546
,Apple 1
Run Code Online (Sandbox Code Playgroud)

代替

10
1
<empty space>
Run Code Online (Sandbox Code Playgroud)

这是我的计划:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main () {
    string str = "10,1.546,Apple 1";
    istringstream stream (str);
    int a;
    double b;
    string c, dummy;
    stream >> a >> dummy >> b >> dummy >> c;
    cout << a << endl;
    cout << b << endl;
    cout << c << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

基本上我试图解析逗号分隔的字符串,任何更平滑的方式来做这将帮助我巨大.

c++ formatted-input istringstream

5
推荐指数
2
解决办法
3万
查看次数

scanf的问题("%d \n",&i)

对于此代码:

int i;
scanf("%d\n",&i);
Run Code Online (Sandbox Code Playgroud)

在输入两个数字之前,我无法停止我的程序.

我觉得很奇怪,我知道当输入合适时,scanf会返回1.当我输入"12a'Enter'',"12'Enter'2"等等时,没关系,i = 12 ,似乎当我输入的东西是不同的int或输入'Enter'和其他东西时,scanf返回1.

我错过了什么?

c c++ format scanf formatted-input

4
推荐指数
1
解决办法
7517
查看次数

将文件中的数字读取到动态分配的数组中

我需要一个从文件中读取成绩(整数)并返回存储它们的动态分配数组的函数。

这是我尝试过的:

int *readGrades() {
int *grades;
int x;
scanf("%d", &x);
grades = malloc(x * sizeof(int));
return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行代码时我什么也没有得到。成绩存储在名为1.in:的文件中

29
6 3 8 6 7 4 8 9 2 10 4 9 5 7 4 8 6 7 2 10 4 1 8 3 6 3 6 9 4
Run Code Online (Sandbox Code Playgroud)

我使用以下命令运行我的程序:./a.out < 1.in

谁能告诉我我做错了什么?

c arrays file-io formatted-input dynamic-memory-allocation

3
推荐指数
1
解决办法
1万
查看次数

python科学记数法强制前导零

我想让Python2.7以科学记数法打印出浮点数,强制从0开始。例如,假设

a=1234567890e12
print '{:22.16E}'.format(a)
1.2345678900000000E+21
Run Code Online (Sandbox Code Playgroud)

但是,我想要一个如下所示的打印输出:

0.1234567890000000E+22
Run Code Online (Sandbox Code Playgroud)

请注意,由于所需的输出被迫为前导零,因此指数增加了 1。我怎样才能实现这个目标?谢谢。

scientific-notation formatted-input python-2.7

3
推荐指数
1
解决办法
4412
查看次数

如何在 C 中定义一个接受格式化输入字符串的函数?

我构建了一个自定义日志记录函数,它接收“日志级别”和字符串。用户将指定与消息关联的日志级别(即错误、警告、跟踪等)。日志功能只会根据当前配置的日志级别将消息打印到控制台。

int global_log_level = INFO;

void logger(int msg_log_level, char * msg)
{
    if(msg_log_level >= global_log_level )
    {
        printf("Log Level = %u: %s", msg_log_level, msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想将格式化的字符串提供给这个函数。

logger(LOG_LEVEL_ERROR, "Error of %u occurred\n", error_code);
Run Code Online (Sandbox Code Playgroud)

但是,通过添加此“包装”逻辑,我无法输入格式化的消息。相反,我必须将消息写入一个临时字符串,然后将其输入到函数中。

char temp[512];
sprintf("Error of %u occurred\n", error_code);
logger(LOG_LEVEL_ERROR, temp);
Run Code Online (Sandbox Code Playgroud)

有没有办法实现记录器功能,这样我就不需要让用户自己创建一个临时字符串?

c printf formatted-input

3
推荐指数
1
解决办法
58
查看次数

从文本文件初始化矢量

我正在尝试编写一个可以读入文本文件的程序,并将其中的每个单词存储为字符串类型向量中的条目.我确信我这样做是非常错误的,但是自从我试图做到这一点以来,我已经忘记了它是如何完成的.任何帮助是极大的赞赏.提前致谢.

码:

#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> input;
    ifstream readFile;

    vector<string>::iterator it;
    it = input.begin();

    readFile.open("input.txt");

    for (it; ; it++)
    {
        char cWord[20];
        string word;

        word = readFile.get(*cWord, 20, '\n');

        if (!readFile.eof())
        {
            input.push_back(word);
        }
        else
            break;
    }

    cout << "Vector Size is now %d" << input.size();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ string file-io vector formatted-input

2
推荐指数
1
解决办法
9219
查看次数

更清洁'消毒'JTextField输入的方法?

所以我正在为JTextField编写TextValueChanged处理程序,它需要很长的输入.它只需要允许用户输入介于0和Long.MAX之间的有效值.如果用户键入无效字符,则应将其删除,以使JTextField中的值始终为有效长度.

我当前的代码看起来像这样,但它看起来很难看.没有外部库(包括Apache Commons),是否有更简洁的方法可以做到这一点?

public void textValueChanged(TextEvent e) {
    if (e.getSource() instanceof JTextField) {
        String text = ((JTextField) e.getSource()).getText();
        try {
            // Try to parse cleanly
            long longNum = Long.parseLong(text);
            // Check for < 1 
            if (longNum < 1) throw new NumberFormatException();
            // If we pass, set the value and return
            setOption("FIELDKEY", longNum);
        } catch (NumberFormatException e1) {
            // We failed, so there's either a non-numeric or it's too large.
            String s = ((JTextField) e.getSource()).getText();
            // Strip non-numeric characters
            s = …
Run Code Online (Sandbox Code Playgroud)

java swing jtextfield formatted-input

0
推荐指数
1
解决办法
674
查看次数