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

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);
    }
}

 

posted @ 2018-09-04 16:05  琴鸟  阅读(282)  评论(0编辑  收藏  举报