文字列操作<改行が消せない>

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

文字列操作<改行が消せない>

#1

投稿記事 by » 15年前

 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

box

Re:文字列操作<改行が消せない>

#2

投稿記事 by box » 15年前

> 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);

こうすればよいでしょう。

dic

Re:文字列操作<改行が消せない>

#3

投稿記事 by dic » 15年前

バックアップ中で時間あまってるので
ペタリ
#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:文字列操作<改行が消せない>

#4

投稿記事 by フリオ » 15年前

 
 質問への回答ではありませんが、
ファイルの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:文字列操作<改行が消せない>

#5

投稿記事 by » 15年前

 みなさんありがとうございました。
おかげで無事解決しました。
今回はboxさんのおっしゃるやり方で
最終的に完成させていただきました。
 全体のソースまで載せていただいたり
別の方面からのアプローチの仕方を
載せていただいたりと、本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る