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