麻烦懂C的人帮忙把下面的C#翻译成C 谢谢

cm2004 2013-10-16 03:31:32
 
public static String getFileID(String fileid, double seed)
{
String mixed = getFileIDMixString(seed);
String[] ids = fileid.Split('*');
StringBuilder realId = new StringBuilder();
int idx;
for (int i = 0; i < ids.Length - 1; i++)
{
idx = int.Parse(ids[i]);
realId.Append(mixed[idx]);
}
//Console.Write(realId.ToString());
return realId.ToString();
}

public static String getFileIDMixString(double seed)
{
StringBuilder mixed = new StringBuilder();
StringBuilder source = new StringBuilder("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890");
int index, len = source.Length;
for (int i = 0; i < len; ++i)
{
seed = (seed * 211 + 30031) % 65536;
index = (int)Math.Floor(seed / 65536 * source.Length);
mixed.Append(source[index]);
source.Remove(index, 1);
}
return mixed.ToString();
}


麻烦把上面的C#翻译成C 谢谢了:)
...全文
269 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
智商余额不足 2013-10-17
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

#define MAX_SIZE 255
 
int splitString(char* str,char** arr,const char* delim);
void removeChar(char* str,int index);
char* getFileIDMixString(double seed);
char* getFileID(const char* fileid, double seed);

int splitString(char* str,char** arr,const char* delim)
{
	if(str==NULL) return 0;
	int i=0;
	char* p=strtok(str,delim);
	while(p!=NULL)
	{
		arr[i++]=p;
		p=strtok(NULL,delim);
	}
	return i;
}

void removeChar(char* str,int index)
{
	if(str==NULL) return;
	int len=strlen(str);
	if(index<0||index>len-1) return;
	if(index==len-1)
	{
		str[index]='\0';
		return;
	}
	int i;
	for(i=index+1;str[i]!='\0';i++)
	{
		str[i-1]=str[i];
	}
	str[i-1]='\0';
}

char* getFileIDMixString(double seed)
{
	char* mixed=(char*)malloc(sizeof(char)*MAX_SIZE);
    char source[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890";
    int index=0;
    int len=strlen(source);
	int i,j;
    for(i=0,j=0;i<len;i++)
    {
        seed=(int)(seed*211+30031)%65536;
        index=(int)floor(seed/65536*strlen(source));
        mixed[j++]=source[index];
        removeChar(source,index);
    }
	mixed[j++]='\0';
    return mixed;
}

char* getFileID(char* fileid,double seed)
{
	char* realId=(char*)malloc(sizeof(char)*MAX_SIZE);
	char* mixed=getFileIDMixString(seed);
	char* ids[MAX_SIZE];
	int n=splitString(fileid,ids,"*");
	int idx,i,j;
	for(i=0,j=0;i<n-1;i++)
	{
		idx=atoi(ids[i]);
		realId[j++]=mixed[idx];
	}
	realId[j++]='\0';
	return realId;
}

int main()
{
	char ss[]="7*8*9";
	printf("%s\n",getFileID(ss,8));
	return 0;
}
智商余额不足 2013-10-17
  • 打赏
  • 举报
回复
修改下
引用 2 楼 hwenycocodq520 的回复:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

#define MAX_SIZE 255

void removeChar(char* str,int index);
char* getFileIDMixString(double seed);

char* getFileIDMixString(double seed)
{
	char* mixed=(char*)malloc(sizeof(char)*MAX_SIZE);

    //同上....

	mixed[j++]='\0';
	return mixed;
}

void removeChar(char* str,int index)
{
	if(str==NULL) return;
	int len=strlen(str);
	if(index<0||index>len-1) return;
	if(index==len-1)
	{
		str[index]='\0';
		return;
	}
	int i;
	for(i=index+1;str[i]!='\0';i++)
	{
		str[i-1]=str[i];
	}
	str[i-1]='\0';
}
智商余额不足 2013-10-17
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<string.h>
#include<math.h>

#define MAX_SIZE 255

void removeChar(char* str,int index);
char* getFileIDMixString(double seed);

char* getFileIDMixString(double seed)
{
	char mixed[MAX_SIZE];
	memset(mixed,0,sizeof(mixed));
	char source[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890";
	int index=0;
	int len=strlen(source);
	for(int i=0,j=0;i<len;i++)
	{
		seed=(int)(seed*211+30031)%65536;
		index=(int)floor(seed/65536*strlen(source));
		mixed[j++]=source[index];
		removeChar(source,index);
	}
	return mixed;
}

void removeChar(char* str,int index)
{
	int i,j;
	for(i=0;str[i]!='\0';i++)
	{
		if(i==index)
		{
			for(j=i+1;str[j]!='\0';j++)
			{
				str[j-1]=str[j];
			}
			str[j-1]='\0';
			break;
		}
	}
}
threenewbee 2013-10-16
  • 打赏
  • 举报
回复
google 线性同余 伪随机数

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧