我正在从文件中读取文本并确定字符串是否以#
开头(不包括空格)
如果#
之前没有其他字符(不包括空格),我将其写入单独的文件
我们应该保留字符串中的空格。
如果在#
之前有空格,但它没有写出来。我不确定这是否是fgets
问题
我不知道或另一个问题。
我确信我的算法有点笨拙
int valid = 1;
while(fgets(str, 250,f1)!=NULL)
{
printf("read strings: %s",str);/*my test*/
for(i=0;i<strlen(str);i++)
{
if(str[i]=='#')
{
printf("strings: %s",str);/*my test*/
for(j=0;j<i;j++)
{
if(isspace(str[j])!=0)
{
valid=0;
break;
}
}
break;
}
else
{
valid=0;
}
}
if(valid==1)
{
fprintf(f2, str);
}
valid=1;
}
所以来自档案:
#the cat sat on# the mat
the sunny day
#cats sit on mats
它会写:
#the cat sat on# the mat
我下周参加考试,并努力做到最好 我可以在短时间内理解我可以理解。
答案 0 :(得分:1)
如果第一个字符是空格,它将进入其他地方:
if(str[i]=='#')
{
<snip>
}
else
{
valid=0; // This line is executed if str[0] is space
}
更好的方法是跳过,直到找到第一个非空格字符,如果是'#',则打印该行,否则不打印它。
答案 1 :(得分:0)
我以为我会发布我的答案,因为我已经把isspace
的测试搞得一团糟。我撤消了valid
的值并删除了有问题的else
。
int valid = 0;
while(fgets(str, 250,f1)!=NULL)
{
for(i=0;i<strlen(str);i++)
{
if(str[i]=='#')
{
valid=1;
printf("strings: %s",str);/*my test*/
for(j=0;j<i;j++)
{
if(isspace(str[j])==0)
{
valid=0;
break;
}
}
break;
}
}
if(valid==1)
{
printf("saved strings: %s",str);
fprintf(f2,"%s", str);
}
valid=0;
}
所以读取文件:
#the cat sat on# the mat
the sunny day
#cats sit on mats
howdy hoo
h#hi there all
#hello jelly beans!#
#no
写入文件f2:
#the cat sat on# the mat
#cats sit on mats
#hello jelly beans!#
#no
感谢KlasLindbäck和M Oehm