【问题标题】:Copying a desired string from a text file in C从 C 中的文本文件复制所需的字符串
【发布时间】:2017-08-12 05:13:13
【问题描述】:

我已读取所需文件中的所有文本,现在存储在buff 中。我只想复制标识符字符串(例如“标题”)之后的字符串内容。

下面的示例文件:

"Title: I$_D$-V$_{DS}$ Characteristic Curves (Device 1)
MDate: 2016-03-01
XLabel: Drain voltage V$_{DS}$
YLabel: Drain current I$_D$
CLabel: V$_{GS}$
XUnit: V
... "

for(;;) {
    size_t n = fread(buff, 1 , DATAHOLD, inFile);

    subString = strstr( buff, "Title");

        if( subString != NULL) {   
            strcpy(graph1.title , (subString + 7));
            subString = NULL;
        }

       ....more if statements....

        if( n < DATAHOLD) {
            break;
        }
}

我知道strstr() 返回一个指向搜索字符串位置的指针,我添加了7 来获取搜索字符串之后的文本,这部分工作正常。问题是strcpy() 将剩余的buff 字符数组复制到graph1.title。 如何指示strcpy() 只复制与substring 指针在同一行的文本?也许使用strtok()

【问题讨论】:

    标签: c string text strstr


    【解决方案1】:

    我同意ChuckCottrill,如果你一次阅读和处理一行会更好。

    此外,由于您正在处理的文件是文本文件,您可以在文本模式下打开它。

    FILE *fin = fopen("filename", "r");
    

    将带有fgets() 的行读入字符串str。需要注意的是,fgets() 会将尾随的\n' 变为str

    fgets(str, sizeof(str), fin);
    
    char *substring;
    if( (substring = strstr(str, "Title: ")) != NULL )
    {
        strcpy(graph1.title, substring+strlen("Title: "));
    }
    

    此时,graph1.title 将包含I$_D$-V$_{DS}$ Characteristic Curves (Device 1)

    【讨论】:

    • fgets 应该切换第一个和最后一个参数。我喜欢这个主意,我会试试看
    【解决方案2】:

    一次读取和处理一行。

    for( ; fgets(line,...); ) {
        do stuff on line
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用另一个strstr 来获取行尾的位置,然后使用strncpy,它类似于strcpy,但接受第三个​​参数,输入的要复制的字符数

      【讨论】:

        猜你喜欢
        • 2021-05-24
        • 1970-01-01
        • 2019-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-30
        相关资源
        最近更新 更多