C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

文字列の並べ替えができない

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■89758 / inTopicNo.1)  文字列の並べ替えができない
  
□投稿者/ HelloPeople (1回)-(2018/12/21(Fri) 06:59:39)

分類:[.NET 全般] 

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Text;
using System.Windows;


namespace Cシャープ練習用
{
class Program
{


static void Main()
{
// 1 行目には箱の側面の数を表す N
int boxSideNum;
boxSideNum = int.Parse(Console.ReadLine());

// そろえる向きを表す文字列 t
string rightOrder;
rightOrder = Console.ReadLine();
//rightOrder.ToCharArray();

// 最初の箱の向きを表す文字列 s
string startOrder;
startOrder = Console.ReadLine();
startOrder.ToCharArray();

// 箱の側面を直すのに何回回したか数える
int rotationCount = 0;

// 箱の側面を直す
for (int i = 0; i < rightOrder.Length; i++)
{
if (rightOrder != startOrder)
{
char save = startOrder[2];
startOrder[2] = startOrder[3]
}
}

//Console.WriteLine("pause");
//Console.ReadKey();
}
}
}

文字列の並べ替えができないです。

並べ替えしたい文字列の例
lloHe

この順番に並べたい文字列
Hello

上の文字列を下の文字列に直したいです。

そのために最初の2文字を後ろに持ってきて
後ろの3文字を前にもってこようと思いましたが
方法がわかりません。

まず文字列が基準の文字列と一致しているかif文で確認し、
一致していれば、文字の入れ替え0回で出力しようと思いました。


一致していなかった場合、
文字列を入れ替えようと思いました。

上の例の場合、
最初の2文字がずれているので、
それを文字列の後ろへもっていくために、
以下の図のように最初の2文字を変数に入れて
後ろの文字列を前に持ってこようと思いましたが、
「プロパティまたはインデクサーは読み取り専用」
という主旨のエラーがでたのでできませんでした。

どうすればよいか教えてください。
引用返信 編集キー/
■89759 / inTopicNo.2)  Re[1]: 文字列の並べ替えができない
□投稿者/ ぶなっぷ (190回)-(2018/12/21(Fri) 09:06:22)
何から話していいか迷うけど、まずは目的だね。

目標とする文字列(今回の例では"Hello")があると。
その上で、文字列の順番だけ狂ってる文字列(今回の例では"lloHe")があって、
文字列内の文字の入れ替えを行って目標とする文字列にしたいと。
そういうことで良いかな?

引用返信 編集キー/
■89760 / inTopicNo.3)  Re[1]: 文字列の並べ替えができない
□投稿者/ 774RR (651回)-(2018/12/21(Fri) 09:14:25)
HelloPeople さんは C には慣れてて C# は不慣れな人?

C の文字列は char[] にすぎないので任意に中身を書き換えることができるのに対して、
C# の System.String は immutable つまり「不変」であるように実装されていて (Java も同様)
いったん生成された String は(原則)書き換えることができないようになっているっす。
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/strings/index
「読み取り専用のコレクション」と明記されてますな。

文字 Char が複数個あって入れ替えを試みることが目的なら String でなくて Char[] を使うとよいっす。
あるいは StringBuilder でもよいかもしれない。

あえて String の中身の文字を書き換えたいなら unsafe って手もあるけど安易に手を出してほしくない領域かも。

引用返信 編集キー/
■89761 / inTopicNo.4)  Re[2]: 文字列の並べ替えができない
□投稿者/ ぶなっぷ (192回)-(2018/12/21(Fri) 09:44:31)
774RRさんのおっしゃっている通り、C#の文字列は中身の一部を書き換えると
いうことができないようになってます。
実は、全ての文字列操作関数は、新たなインスタンスを生成して返すんですね。
  Remove(), Replace(), Substring(), ...

だから、単純な内部文字置換であっても文字列として操作せねばなりません。
(例) input文字列のインデックス3と2の文字を入れ替え
  string input = "lloHe";
  string pullChr = new string(input[3], 1);
  string removeStr = input.Remove(3, 1);
  input = removeStr.Insert(2, pullChr);

C言語っぽく扱いたいなら、774RRさんの話通りです。

引用返信 編集キー/
■89762 / inTopicNo.5)  Re[1]: 文字列の並べ替えができない
□投稿者/ はまぐり (67回)-(2018/12/21(Fri) 10:21:44)
No89758 (HelloPeople さん) に返信

https://paiza.io/projects/qioKH7QLtGMIcysw99Dg1g
引用返信 編集キー/
■89777 / inTopicNo.6)  Re[2]: 文字列の並べ替えができない
□投稿者/ HelloPeople (2回)-(2018/12/23(Sun) 14:11:32)
No89762 (はまぐり さん) に返信
> ■No89758 (HelloPeople さん) に返信
>
> 皆さん

本当にありがとうございました。
char配列に直したら、
おかげさまで解決しました。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ