c++如何巧妙变为c,青高收捷达

#include <iostream>  
#include <string>  
#include <vector>  
#include <algorithm>  
  
using namespace std;  
  
bool MyComp(const string &s1, const string &s2)  
{  
    long c1 = count(s1.begin(), s1.end(), '1');  
    long c2 = count(s2.begin(), s2.end(), '1');  
    return c1 != c2 ? c1 < c2 : s1 < s2;  
}  
  
int main()  
{  
    vector<string> vstr;  
    string str;  
    int n;  
  
    while (cin >> n)  
    {  
        vstr.clear();  
        while (n--)  
        {  
            cin >> str;  
            vstr.push_back(str);  
        }  
        sort(vstr.begin(), vstr.end(), MyComp);  
  
        for (vector<string>::iterator it = vstr.begin(); it < vstr.end(); it++)  
        {  
            cout << *it << endl;  
        }  
    }  
  
    return 0;  
}

供参考:

#include <stdio.h>
#include <string.h>
int cnt(char *s)
{
    int i ,cnt;
    for(i = 0,cnt = 0;s[i] != '\0';i++)
        if(s[i] == '1')  cnt++;
    return cnt;
}
void sort(char** s,int n)
{
    int i ,j;
    char tmp[81];
    for(i = 0;i < n -1; i++){
        for(j = 0;j < n - 1 - i; j++){
            if(cnt(s[j]) > cnt(s[j+1])){
               strcpy(tmp,s[j]);
               strcpy(s[j],s[j+1]);
               strcpy(s[j+1],tmp);
            }
            else if(cnt(s[j]) == cnt(s[j+1])
                && strcmp(s[j],s[j+1]) > 0){
               strcpy(tmp,s[j]);
               strcpy(s[j],s[j+1]);
               strcpy(s[j+1],tmp);
            }
        }
    }
}
int main()
{
    char** str;
    int  n , i;
    while (scanf("%d", &n) == 1){ //输入 ctrl + z 结束输入
         str = (char**)malloc(sizeof(char*)*n);
         for(i = 0;i < n; i++)
             str[i] = (char*)malloc(sizeof(char)*81);
         i = 0;
         getchar();
         while (n--){
             gets(str[i]);
             i++;
         }
         sort(str,i);
         for(n = 0;n < i; n++)
             puts(str[n]);
    }
    return 0;
}

不就是把使用STL的部分换成手写或者C库函数

浅学一下