【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21444

文字列の前後を「""」で囲みたい
投稿者---P丘(2005/06/14 21:35:32)



文字列の中に、カンマ「,」が存在した場合、ダブルクォーテーション「""」で
囲んで、同じ変数に格納したいのですが、その処理を行っているとこを、もう少し、
スマートにしたいのです。
赤いところがその処理なのですが、なにか良い方法はないですか。


#include<stdio.h>


void sub(char *str)
{
    char *p;
    char tmp[128] ;
    int  len;

    p = str;
    len = strlen(str);

    if (*str != '\0') {
        while (*str) {
            if (*str == ',') {
                break;
            } else {
                *str++;
            }
        }
        
        if (strlen(str) == 0) {
            str = p;
        } else {
            tmp[0] = '"';
            strncpy(&tmp[1],p,len);
            tmp[len+1] = '"';
            strncpy(p,tmp,len+2);
            *(p + (len+2)) = '\0';
            str = p;
            printf("[%s]\n",p);
            printf("[%s]\n",str);
        }
        
    }

}

main()
{
    char str[64];

    memset(str,'\0',sizeof str);
    strncpy(str,"12345,67890",11);

    sub(str);

    printf("[%s]\n",str);
}




この投稿にコメントする

削除パスワード

No.21448

Re:フラグ変数のビット位置の検索
投稿者---P丘(2005/06/14 22:26:27)


>memmove
このような関数があるとは知りませんでした。
ありがとうございます。


この投稿にコメントする

削除パスワード

No.21449

Re:文字列の前後を「""」で囲みたい
投稿者---かずま(2005/06/14 22:36:35)


すみません。
題名が間違っていたので、削除して投稿し直そうとしたら、既に返信がついていました。
#include <stdio.h>
#include <string.h>

void sub(char *str)
{
    if (strchr(str, ',')) {
        int len = strlen(str);
        memmove(str+1, str, len);
        str[len+1] = str[0] = '"';
        str[len+2] = '\0';
    }
}

int main(void)
{
    char str[64] = "12345,67890";

    printf("[%s]\n", str);
    sub(str);
    printf("[%s]\n", str);
    return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧