Paiza Cランク獲得問題（Dランク相当）　文字列処理メニュー②

paizaのCランク獲得問題の解答がなかったので、備忘録として残します。
明らかに簡単な問題の場合は省略しますが、個人的に少しでも考えたコードを残していきたいと思います。
初心者ですので醜いコードを書きますが、温かい目で見守っていただけると嬉しいです。
また、より良い記述方法などありましたら、コメント等で教えていただけると嬉しいです。

# 目次
- 文字列の検索
- 文字列の反転
- 回文判定
- 文字列の分割
- 日時データの変換その１
- 日時データの変換その２
- 数値判定
- 重複の削除
- パスワード作成
- 表記の訂正
- 数式の計算（ 1 桁）
- 数式の計算
- 巨大な数の足し算(繰り上がりなし)
- 巨大な数の足し算
- 巨大な数のかけ算


## 文字列の検索
[問題文](https://paiza.jp/works/mondai/string_primer/normal_step9/edit?language_uid=c-sharp)
```c#
using System;
class Program
{
    public static void Main()
    {
       string S =Console.ReadLine();
       string T =Console.ReadLine();
       if(S.Contains(T)){
        Console.WriteLine("YES");
       }else{
        Console.WriteLine("NO");
       }

    }
}
```

## 文字列の反転
[問題文](https://paiza.jp/works/mondai/string_primer/normal_step10/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
class Program
{
    public static void Main()
    {
       string S=Console.ReadLine();
       string reverseS=new string(S.Reverse().ToArray());
       Console.WriteLine(reverseS);
    }
}
```

## 回文判定
[問題文](https://paiza.jp/works/mondai/string_primer/normal_step11/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
class Program
{
    public static void Main()
    {
       string S=Console.ReadLine();
       string reverseS=new string(S.Reverse().ToArray());
       if(S==reverseS){
        Console.WriteLine("YES");
       }else{
        Console.WriteLine("NO");
       }
    }
}
```

## 文字列の分割
[問題文](https://paiza.jp/works/mondai/string_primer/advance_step1/edit?language_uid=c-sharp)
```c#
using System;
class Program
{
    public static void Main()
    {
       string [] S=Console.ReadLine().Split(',');
       foreach(var result in S){
        Console.WriteLine(result);
       }
    }
}
```

## 日時データの変換その１
[問題文](https://paiza.jp/works/mondai/string_primer/advance_step2?language_uid=c-sharp)
```c#
using System;
class Program
{
    static void Main()
    {
        string [] S=Console.ReadLine().Split('/');
        string [] R=S[3].Split(':');
        for(int i=0;i<3;i++){
            Console.WriteLine(S[i]);
        }
        for(int i=0;i<R.Length;i++){
            Console.WriteLine(R[i]);
        }
    }
}
```

## 日時データの変換その２
[問題文](https://paiza.jp/works/mondai/string_primer/advance_step3/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;
class Program
{
    static void Main()
    {
        string []yyyyMMddhhmm= Console.ReadLine().Split(' ');
        string yyyyMMdd=yyyyMMddhhmm[0];
        string hhmm=yyyyMMddhhmm[1];
        string [] R1=yyyyMMdd.Split('/');
        string [] R2=hhmm.Split(':');
        string [] R = R1.Concat(R2).ToArray();
        foreach(var result in R){
            Console.WriteLine(result);
        }
        
    }
}
```

## 数値判定
[問題文](https://paiza.jp/works/mondai/string_primer/advance_step4/edit?language_uid=c-sharp)
```c#
using System;
class Program
{
    static void Main()
    {
        string S=Console.ReadLine();
        bool result=true;
        foreach(char s  in S){
            if (!char.IsDigit(s)){
                result=false;
                break;
            }
        } 
        if(result){
            Console.WriteLine("YES");
        }else{
            Console.WriteLine("NO");
        }
    }
}
```
初めはTry.Parseを考えたのですが、intの範囲を超えると正しく判定されるので上手くいきませんでした。

## 重複の削除
[問題文](https://paiza.jp/works/mondai/string_primer/advance_step5/edit?language_uid=c-sharp)
```c#
using System;
using System.Collections.Generic;
class Program
{
    public static void Main()
    {
       string S=Console.ReadLine();
       HashSet<char> chek=new HashSet<char>();
       string result="";
       foreach (char c in S)
        {
            if (!chek.Contains(c))
            {
                result += c;
                chek.Add(c);
            }
        }

        Console.WriteLine(result);

    }
}
```
ハッシュセットを用いました。

## パスワード作成
[問題文](https://paiza.jp/works/mondai/string_primer/advance_step6/edit?language_uid=c-sharp)
```c#
using System;
class Program
{
    public static void Main()
    {
        int N=int.Parse(Console.ReadLine());
        int Q=int.Parse(Console.ReadLine());
        int[] n = new int[Q];
        string[] c = new string[Q];
        for(int i=0;i<Q;i++){
            string[] values = Console.ReadLine().Split();
            n[i] = int.Parse(values[0]) - 1;
            c[i] = values[1];
        }
        string K = Console.ReadLine();
        string []pass=new string[N];
        for(int i=0; i<N;i++){
            pass[i]=K;
        }
        for(int i=0;i<Q;i++){
            pass[n[i]]=c[i];
        }
        for(int i=0; i<N;i++){
            Console.Write(pass[i]);
        }

    }
}
```

## 表記の訂正
[問題文](https://paiza.jp/works/mondai/string_primer/advance_step7/edit?language_uid=c-sharp)
```c#
using System;

class Program
{
    public static void Main()
    {
        string S=Console.ReadLine();
        string[] point =S.Split('.');
        if(point.Length>2){
            string []point1=new string[point.Length-1];
            for(int i=0;i<point1.Length;i++){
                point1[i]=point[i+1];
            }
            S=point[0]+"."+string.Join("",point1);
        }
        if (S.IndexOf('.') != -1){
            S=S.TrimEnd('0');
        }

        S=S.TrimStart('0');
        if(S.IndexOf('.')==0){
            S = "0" + S.TrimStart('0');
        }
        if(S==""){
            S="0";
        }
        Console.WriteLine(S);

    }
}
```
[こちら](https://lets-csharp.com/string-questions/)のサイトを参考にさせていただきました。

## 数式の計算（ 1 桁）
[問題文](https://paiza.jp/works/mondai/string_primer/advance_step8/edit?language_uid=c-sharp)
```c#
using System;

class Program
{
    public static void Main()
    {
        string S=Console.ReadLine();
        char []s=S.ToCharArray();
        int ans=(int)Char.GetNumericValue(s[0]);
        
        for(int i=0;i<s.Length;i++){
            if(s[i]=='+'){
                ans+=(int)Char.GetNumericValue(s[i+1]);
            }
            if(s[i]=='-'){
                ans-=(int)Char.GetNumericValue(s[i+1]);
            }
        }
        Console.WriteLine(ans);
    }
}
```

## 数式の計算
[問題文](https://paiza.jp/works/mondai/string_primer/advance_step9/edit?language_uid=c-sharp)
```c#
using System;
using System.Collections.Generic;

class Program
{
    public static void Main()
    {
        string S = Console.ReadLine();
        List <string>list =new List<string>();
        int count=0;
        for(int i=0;i<S.Length;i++){
            if(S[i] == '+' || S[i] == '-'){
                list.Add(S.Substring(count,i-count));
                count=i;
            }else if(i ==S.Length-1){
                list.Add(S.Substring(count, i - count+ 1));
            }
        }
        int ans=0;
        foreach(string item in list){
            ans+=int.Parse(item);
        }
        Console.WriteLine(ans);
    }
}
```


## 巨大な数の足し算(繰り上がりなし)
[問題文](https://paiza.jp/works/mondai/string_primer/advance_step10/edit?language_uid=c-sharp)
```c#
using System;
using System.Collections.Generic;


class Program
{
    public static void Main()
    {
        string S = Console.ReadLine();
        char[] s=S.ToCharArray();
        string T =Console.ReadLine();
        char []t=T.ToCharArray();
        int []ans =new int [S.Length];
        for(int i=0;i<S.Length;i++){
            int ints=(int)Char.GetNumericValue(s[i]);
            int intt=(int)Char.GetNumericValue(t[i]);
            ans[i]=ints+intt;
        }
        foreach(var result in ans){
            Console.Write(result);
        }
    }
}
```
同じ桁数かつ繰り上がりがないので、出来る方法です。。
charをintに変換するのはint.Parse(s[i].ToString());で出来ます。。

## 巨大な数の足し算
[問題文](https://paiza.jp/works/mondai/string_primer/advance_step11/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;


class Program
{
    public static void Main()
    {
        string S = Console.ReadLine();
        char[] s=S.ToCharArray().Reverse().ToArray();
        string T =Console.ReadLine();
        char []t=T.ToCharArray().Reverse().ToArray();
        string ans="";
        int kuri =0;
        for(int i=0;i<S.Length;i++){
            int ints=int.Parse(s[i].ToString());
            int intt=int.Parse(t[i].ToString());
            int wa=ints+intt+kuri;
            kuri=wa/10;
            wa%=10;
            ans+=wa.ToString();
        }
        if(kuri !=0){
            ans+=kuri;
        }

        foreach(var result in ans.Reverse()){
            Console.Write(result);
        }
    }
}
```

## 巨大な数のかけ算
[問題文](https://paiza.jp/works/mondai/string_primer/advance_step12/edit?language_uid=c-sharp)
```c#
using System;
using System.Linq;


class Program
{
    public static void Main()
    {
        string S = Console.ReadLine();
        char[] s=S.ToCharArray().Reverse().ToArray();
        int t=int.Parse(Console.ReadLine());
        string ans="";
        int kuri=0;
        if(t==0 ||(s.Length == 1 && int.Parse(S) == 0)){
            Console.WriteLine("0");
            return;
        }
        
        for(int i=0;i<S.Length;i++){
            int ints=int.Parse(s[i].ToString());
            int seki =ints*t+kuri;
            kuri=seki/10;
            seki%=10;
            ans+=seki.ToString();
        }
        if(kuri !=0){
            ans+=kuri;
        }

        foreach(var result in ans.Reverse()){
            Console.Write(result);
        }

    }
}
```
また[こちら](https://lets-csharp.com/string-questions/)のサイトを参考にさせていただきました。