質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

1088閲覧

C#で文字列の前後にあるスペースとタブを削除したい

poy327

総合スコア16

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/11/14 07:11

編集2018/11/14 07:21

タイトル通り、C#で文字列の前後にあるスペースとタブを削除するソースを作成しています。

windows0でVisual Studio2017を使用しています。

作成中、以下のエラーを吐いてしまっていて原因が分からないのですが、力をお貸しください。

エラーの箇所は、
str[i + 1] = '\0'; の str[i + 1]

for (j = 0; j <= len - i; c = str[i + j], str[j++] = c) の str[j++]

です。

※teratailを利用するのは今回が初めてになりますので、至らぬ点がありましたら申し訳ありません。

発生している問題・エラーメッセージ

エラーメッセージ プロパティまたはインデクサー'string.this[int]'は読み取り専用であるため、割り当てることはできません。

C#

1 public int pctab_suppress(ref string str, int direc) 2 { 3 int i; 4 int j; 5 int len; 6 char c; 7 8 len = str.Length; 9 if (len == 0) 10 { 11 return (0); 12 } 13 if (direc != 0) 14 { 15 for (i = len - 1; i >= 0 && (str[i] == ' ' || str[i] == '\t'); i--) 16 { 17 ; 18 } 19 if (i != len - 1) 20 { 21 str[i + 1] = '\0'; 22 } 23 } 24 else 25 { 26 for (i = 0; i < len && (str[i] == ' ' || str[i] == '\t'); i++) 27 { 28 ; 29 } 30 if (i != 0) 31 { 32 for (j = 0; j <= len - i; c = str[i + j], str[j++] = c) 33 { 34 ; 35 } 36 } 37 } 38 return (0); 39 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

string.trimを使用されると良いかと思います。

また、String.Chars[Int32]はReadOnlyのため、書き込むことはできません。
ですので、値を代入する部分でエラーとなっています。

投稿2018/11/14 07:14

編集2018/11/14 07:28
YAmaGNZ

総合スコア10258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poy327

2018/11/14 09:26

回答ありがとうございます。 サイトなども見たのですが、この場合どのようにしてstring.trimを入れれば良いのでしょうか?
YAmaGNZ

2018/11/14 09:31

紹介したページにサンプルソースがありますが、それを見てどこが分かりませんか?
guest

0

ベストアンサー

そもそものお話として、'\0'を入れても終端にならないので、ロジックに無理があります。
C#はCではないので。

csharp

1 var a = " b\0\t"; 2 Console.WriteLine($">>{a}<<");

例えば↑こうやってもタブが出力されます。

-- 追加:trimの使い方
var a = " b\0\t";
Console.WriteLine($">>{a.Trim()}<<");
-- 追加おわり

Trimが嫌だというか、習作としてやるならこういう風にするのがC#だと思います

csharp

1 var a = " bb \ta \t"; 2 var c = a.SkipWhile(char.IsWhiteSpace).Reverse().SkipWhile(char.IsWhiteSpace).Reverse().ToArray(); 3 Console.WriteLine($">>{new string(c)}<<");

投稿2018/11/14 07:49

編集2018/11/15 01:36
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poy327

2018/11/14 09:28

回答ありがとうございます。 なんとか頑張ってみます。
papinianus

2018/11/15 01:36

trimの使い方を追記しときました。
poy327

2018/11/15 05:11

ありがとうございました! 無事にエラーもなく、デバッグをかけることができました。 感謝してもしきれません
guest

0

var s=str.Trim();

で。


str=str.trim();
でいいのか

投稿2018/11/14 07:13

編集2018/11/14 07:16
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poy327

2018/11/14 09:27

回答ありがとうございます。 早速やってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問