ページ 1 / 1
文字列操作<改行が消せない>
Posted: 2010年1月23日(土) 23:30
by 白
2つの文字列を読み込んでそれを連結して
一つの文字列として出力したいので、文字列操作
関連の関数をいろいろといじってみたのですが、
どうしても改行が入ってしまい、上手にいきません。
下にしるした例も非常にわかりずらいかと思いますが、
どうか問題点を教えていただきたいです。
よろしくお願いします。
char buf1[256],buf2[256];
char *buf;
char s1[/url] = "\n";
while(fgets(buf2,256,F_input) != NULL){
buf = strtok(buf2,s1); //\nをはずす
while(fgets(buf2,256,F_material) != NULL){
for(i = 0;i < 256;i ++)
buf1 = buf;
strcat(buf1,buf2);
fputs(buf1,F_output);
}
例文字列1 = 123456789 文字列2 = qwertyuio //各最後は改行されている文字列だと思ってください。
現在の出力
123456789
qwertyuio
123456789
qwertyuio
希望の出力
123456789qwertyuio
123456789qwertyuio
Re:文字列操作<改行が消せない>
Posted: 2010年1月24日(日) 00:08
by box
> while(fgets(buf2,256,F_input) != NULL){
> buf = strtok(buf2,s1); //\nをはずす
fgets()で読んだ文字列の、'\0'直前の'\n'を外す定番の(と思われる)やり方は
if (buf2[strlen(buf2)-1] == '\n')
buf2[strlen(buf2)-1] = '\0;
です。中間バッファbufは不要です。
そして、
> while(fgets(buf2,256,F_material) != NULL){
ここではbuf2ではなくbuf1に読み込んで
> for(i = 0;i < 256;i ++)
> buf1 = buf;
このfor文を外して、
> strcat(buf1,buf2);
> fputs(buf1,F_output);
こうすればよいでしょう。
Re:文字列操作<改行が消せない>
Posted: 2010年1月24日(日) 09:35
by dic
バックアップ中で時間あまってるので
ペタリ
#include <stdio.h>
#include <memory.h>
#include <string.h>
int main()
{
FILE *file = fopen( "hoge.txt", "rt" );
if( file == NULL )
{
printf( "file not found.\n" );
return -1;
}
int len;
char buf[256], out[1024];
memset( buf, 0, sizeof(buf) );
memset( out, 0, sizeof(out) );
fgets( buf, sizeof(buf), file );
strcpy( out, buf );
len = strlen(out);
out[len-1] = 0;
while( !feof(file) )
{
fgets( buf, sizeof(buf), file );
int len = strlen(buf);
buf[len-1] = 0;
strcat( out, buf );
}
fclose( file );
file = 0;
file = fopen( "out.txt", "wt" );
if( file == NULL )
{
printf( "file not open.\n" );
return -1;
}
fputs( out, file );
fclose( file );
file = 0;
return 0;
}
Re:文字列操作<改行が消せない>
Posted: 2010年1月24日(日) 17:10
by フリオ
質問への回答ではありませんが、
ファイルの2行づつを1行にまとめるのなら、こんな方法もあります。
#include <stdio.h>
int main(int argc, char *argv[/url])
{
int c, i;
FILE *fin, *fout;
if(argc != 3){
puts("Parameter Error");
return 1;
}
if(!(fin = fopen(argv[1], "r"))){
puts("InputFile Open Error");
return 1;
}
if(!(fout = fopen(argv[2], "w"))){
puts("OutputFile Open Error");
fclose(fin);
return 1;
}
for(i = 0; (c = fgetc(fin)) != EOF; i ^= (c == '\n'))
{
if(i || c != '\n') fputc(c, fout);
}
fclose(fin);
fclose(fout);
return 0;
}
Re:文字列操作<改行が消せない>
Posted: 2010年1月26日(火) 22:17
by 白
みなさんありがとうございました。
おかげで無事解決しました。
今回はboxさんのおっしゃるやり方で
最終的に完成させていただきました。
全体のソースまで載せていただいたり
別の方面からのアプローチの仕方を
載せていただいたりと、本当にありがとうございました。