[解決済み] 標準的な方法で先頭/末尾の空白をトリミングするにはどうすればよいですか?
2022-04-19 14:46:23
質問
C言語で文字列から先頭と末尾のホワイトスペースをきれいに、できれば標準的な方法で切り取る方法はありますか?私は自分自身をロールバックしますが、私はこれが同様に一般的な解決策を持つ一般的な問題であると思います。
解決方法は?
文字列を変更できる場合。
// Note: This function returns a pointer to a substring of the original string.
// If the given string was allocated dynamically, the caller must not overwrite
// that pointer with the returned value, since the original pointer must be
// deallocated using the same allocator with which it was allocated. The return
// value must NOT be deallocated using free() etc.
char *trimwhitespace(char *str)
{
char *end;
// Trim leading space
while(isspace((unsigned char)*str)) str++;
if(*str == 0) // All spaces?
return str;
// Trim trailing space
end = str + strlen(str) - 1;
while(end > str && isspace((unsigned char)*end)) end--;
// Write new null terminator character
end[1] = '\0';
return str;
}
文字列を変更できない場合は、基本的に同じ方法で対応できます。
// Stores the trimmed input string into the given output buffer, which must be
// large enough to store the result. If it is too small, the output is
// truncated.
size_t trimwhitespace(char *out, size_t len, const char *str)
{
if(len == 0)
return 0;
const char *end;
size_t out_size;
// Trim leading space
while(isspace((unsigned char)*str)) str++;
if(*str == 0) // All spaces?
{
*out = 0;
return 1;
}
// Trim trailing space
end = str + strlen(str) - 1;
while(end > str && isspace((unsigned char)*end)) end--;
end++;
// Set output size to minimum of trimmed string length and buffer size minus 1
out_size = (end - str) < len-1 ? (end - str) : len-1;
// Copy trimmed string and add null terminator
memcpy(out, str, out_size);
out[out_size] = 0;
return out_size;
}
関連
-
[解決済み] バイトを文字列に変換する
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Javascriptで文字列の最後の文字を切り取るにはどうしたらいいですか?
-
[解決済み] 文字列から空白を取り除くには?
-
[解決済み] 空白文字を削除するにはどうすればよいですか?
-
[解決済み] JavaScriptにおけるendsWith
-
[解決済み] C言語標準に準拠した構造体の初期化方法
-
[解決済み] 先頭と末尾の空白を削除するにはどうしたらよいですか?
-
[解決済み】大文字・小文字を区別しない「Contains(string)
-
[解決済み】Javaの文字列から先頭と末尾の空白を取り除く
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
関数 'malloc' の暗黙の宣言に対する解決策
-
[解決済み] C言語で文字列をトリミングする [重複]。
-
[解決済み] Xcode - 警告。C99 では関数の暗黙の宣言は無効です。
-
[解決済み] flexible array member not at end of structエラーの原因は何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] C言語のi++と++iに性能差はあるのでしょうか?
-
[解決済み] ストラクチャーとユニオンの違い
-
[解決済み] C言語の構造体(CGRectやCGPointなど)をNSLog化することは可能ですか?