如何使用fscanf读取(到)?

时间:2014-12-31 10:14:18

标签: c

如何在c中使用scanf读取括号之间的字符串?例如,如果文件中的文本是“text a 123(myString)text”,我如何获得“myString”?

4 个答案:

答案 0 :(得分:1)

您可以将%[]用作穷人的正则表达式:

#include <stdio.h>

int main(){
   const char data[] = "text a 123 (myString) text";
   char str[20];
   int cr = sscanf( data, "%*[^(](%[^)])", str ); /* skip until '(' and read up to ')' */
   if (cr == 1) {
        printf(">%s<\n", str);
   }
   else {
       printf("NOT FOUND\n");
   }
   return 0;
}

以上程序正确输出:

>myString<

答案 1 :(得分:0)

只是为了阅读你的专栏,你可以有类似

的内容
char a[50];
fscanf(stdin,"%*s %*s %*d (%[^)]) %*s",a);

答案 2 :(得分:0)

完整示例:

#include <stdio.h>

int main(){
   const char data[] = "text a 123 (myString) text";
   char str[20];
   sscanf( data, "%*s %*c %*d (%[^)]", str );
   puts( str );
   return 0;
}

更新:

您可以使用以下内容替换sscanf行(在(之前忽略avrytihing,然后阅读)

sscanf( data, "%*[^(](%[^)]", str );

注意:我不确定这种编程习惯是多么便携,但它至少在Ubuntu 12.04上有效。

答案 3 :(得分:0)

示例:

#include <stdio.h>
#include <stdlib.h>
int main(){
        char mystring[1025];
        FILE * fp = NULL;
        fp= fopen("dd.txt","r");
        if(!fp){

        }else{
                fscanf(fp, "%*s %*c %*d (%[^)] %*s",mystring);
                printf("%s\n",mystring);
        }

        fclose(fp);

}