• 几种常见语言的基本语法对比:字符串


    c++: 一段时间不写c++。简直又是忘光了。而其他语言几年不写。几个小时就回想起来了。还是c++太难了。各种用法。学的时候就没学明白。

    写代码的时候,一直回想 ,如这个参数,是否用常引用。  vecotr是如何实现的?string是如何实现的。string[] 堆栈是如何放的。

    只要涉及到堆。基本不用写代码了。一头郁闷包,算了c++。永别了。例子都不 敢写完。随便写下吧。

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    string JoinString(vector<string> books)
    {
        string *ret=new string("");
        int count=books.size();
        cout<<count<<endl;
        for(int i=0;i<count;++i)
        {
            ret->append(books[i]);
        }
        return *ret;
    }
    
    
    
    int main()
    {
        string books[]={"c++ primer","c#"};
        cout<<books[0]<<endl;
        cout<<books[1]<<endl;
        cout<<&books[0]<<endl;
        cout<<&books[1]<<endl;
    
        vector<string> *myarray=new vector<string>();//memory ..
        myarray->push_back(books[0]);
        myarray->push_back(books[1]);
    
        cout<<JoinString(*myarray)<<endl;
    
    
        delete myarray;
        return 0;
    }

    oc:前半个小时很郁闷。写完oc。又舒畅了。到底哪里的问题呢? oc 和c++ 是同一层次的语言,都直接控制内存。有指针。但oc为什么用起来舒服呢?  oc 能写的c++也能写啊。

    仔细分析,

    1.oc有 xcode。

    2 oc ,从语法层面死死固定了非基本类型。必须是放入堆中。单就这一样。就能看出,为了减小分歧。而舍弃不重要的选择,其实是更明智的。最起码对我来 说是。

    3.提供了必要基础的的库函数,如string 的分割函数。

    4.有歧义会误解的用法已经屏蔽了。如 [array count] 就是集合的长度。不可能会是像  c++那样是 第一个元素的字节长度。

    就算自己按照oc的写法来写c++  。所有对象都放入堆中,又有什么用呢?  写程序又不是一个人写的。每个人都有自己习惯。  无规则不方圆。

    各种不违法的用法全部提供,全部 开放,违背简单,快速原则啊,  靠团队自己规范。这个。。 c++,唉。再见。

    #import <Foundation/Foundation.h>
    
    enum enum_op
    {
        enum_op_add,
        enum_op_minus,
        enum_op_time,
        enum_op_divide
    };
    
    int NumberCaculate(int a,int b,enum enum_op op);
    NSString* ComposeString(NSArray<NSString*>* array,char splitchar);
    NSArray* splitStr(NSString * mystr,char splitchar);
    
    
    int main(int argc, const char * argv[])
    {
        @autoreleasepool
        {
            NSMutableArray<NSString*>* books=[NSMutableArray<NSString*> new];
            
            [books addObject:@"c++"];
            [books addObject:@"c#"];
            [books addObject:@"java"];
            
            NSString * mystr=ComposeString(books, '|');
            NSLog(@"%@", mystr);
            
            NSArray *array = splitStr(mystr, '|');
            
            NSLog(@"%@",array);
            
        }
        return 0;
    }
    
    
    
    NSString* ComposeString(NSMutableArray<NSString*>* array,char splitchar)
    {
        NSString * ret=[NSString new];
        
        for(int i=0;i<[array count];i++)
        {
            if(i==0)
            {
                ret=[NSString stringWithFormat:@"%@",array[i]];
            }
            else
            {
                NSString * tempstr=[NSString stringWithFormat:@"%c%@",splitchar, array[i]];
                ret=[ret stringByAppendingString:tempstr];
            }
        }
        
        return ret;
    }
    
    
    NSArray* splitStr(NSString * mystr,char splitchar)
    {
        NSArray *array = [mystr componentsSeparatedByString:[NSString stringWithFormat:@"%c",splitchar]];
        return array;
    }

    c++ ,按oc 的 写法重写,确实没那么多犹豫了。虽然有些地方啰嗦。  这里有内存泄漏, 把原生指针改为 智能指针就可以了。

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    string* JoinString(vector<string*> *books)
    {
        string *ret=new string("");
        int count=books->size();
        cout<<count<<endl;
        for(int i=0;i<count;++i)
        {
            ret->append  (*((vector<string*>)(*books))[i])   ;
        }
        return ret;
    }
    
    
    
    int main()
    {
    
        vector<string*> *myarray=new vector<string*>();
        string *temp1=new string("c++");
        string *temp2=new string("c#");
        string *temp3=new string("java");
    
        myarray->push_back(temp1);
        myarray->push_back(temp2);
        myarray->push_back(temp3);
    
        string * myret=JoinString(myarray);
        cout<<*myret<<endl;
    
    
        delete myarray;
        return 0;
    }

    c#: 用c#, 想怎么写。就怎么写。还不停顿。没有对比就没有伤害。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace helloworld
    {
        public class stringStudy
        {
            public static void showMe()
            {
                string[] books = { "c++", "c#", "java" };
                List<string> books_list = new List<string>();
                books_list.Add("c++");
                books_list.Add("c#");
                books_list.Add("java");
                books_list.Add("oc");
    
    
                string tempstr = joinstr<string[]>(books,'|');
    
                string tempstr2 = joinstr<List<string>>(books_list, '|');
    
                System.Console.WriteLine(tempstr);
                System.Console.WriteLine(tempstr2);
    
    
                string[] temparray=  tempstr.Split(new char[]{'|'}, StringSplitOptions.None);
                System.Console.WriteLine(temparray[0]);
            }
    
            public static string joinstr<T>(T books,char splitChar)
            {
                if(books is List<string>)
                {
                    List<string>  tempbooks = (List<string>)Convert.ChangeType(books, typeof(List<string>));
                    string ret = "";
                    for (int i = 0; i < tempbooks.Count;i++ )
                    {
                        if(i==0)
                        {
                            ret = tempbooks[i];
                        }
                        else
                        {
                            ret += splitChar.ToString()+ tempbooks[i];
                        }
                    }
                    return ret;
                }
                else if(books is string[])
                {
                    string[] tempbooks = (string[])Convert.ChangeType(books, typeof(string[]));
    
                    string ret = "";
                    for (int i = 0; i < tempbooks.Length; i++)
                    {
                        if (i == 0)
                        {
                            ret = tempbooks[i];
                        }
                        else
                        {
                            ret += splitChar.ToString() + tempbooks[i];
                        }
                    }
                    return ret;
                }
                else
                {
                    return null;
                }
            }
        }
    }

    java:和c# 差不多。

    package com.linson;
    
    public abstract class StudyString 
    {
        public static String JoinString(String[] data,char splitChar)
        {
            StringBuilder sb=new StringBuilder();
            for(int i=0;i<data.length;i++)
            {
                String tempString=data[i].replace(splitChar, ' ');
                if(i!=0)
                {
                    sb.append(splitChar);
                }
                
                sb.append(tempString);
            }
            return sb.toString();
        }
        
        public static  String[] SplitString(String mystr,char splitChar) 
        {
            String strsplit="\"+splitChar+"";//java need \ to present a special .eg:|
            return mystr.split(strsplit);
        }
        
        public static boolean IsContain(String mystr, String substr) 
        {
            return mystr.contains(substr);
        }
    }
  • 相关阅读:
    剑指offer---尾到头打印链表
    剑指offer---链表中环的入口结点
    剑指offer---删除链表中重复的结点2
    剑指offer---删除链表中重复的结点
    6.shap以及selector的使用
    7.进度条(ProgressBar)
    5.toogleButton以及Switch
    4.基础控件
    3.触摸事件
    2.点击事件和页面切换
  • 原文地址:https://www.cnblogs.com/lsfv/p/9585040.html
Copyright © 2020-2023  润新知