字符串
1、把一串字符串里的数字找出来加起来
long long int AddNumInChar(const char* str)
{
assert(str!=NULL);
int length=strlen(str);
long long int result=0;
for(int i=0;i<length;i++)
{
if(str[i]>='0'&&str[i]<='9')
{
result+=str[i]-'0';
}
}
return result;
}
2、把字符串转换成整数
void Char2Int(const char*str)
{
assert(str!=NULL);
int length=strlen(str);
long long int result=0;
bool flag=false;
bool fuhao=true;
for(int i=0;i<length;i++)
{
if(i==0&&(str[0]=='+'||str[0]=='-'))
{
fuhao=str[0]=='-'?false:true;
}
else if(str[i]>='0'&&str[i]<='9')
{
flag=true;
result=result*10+str[i]-'0';
}
else
{
printf("My God\n");
return;
}
}
if(!fuhao)
result=result*(-1);
printf("%lld\n",result);
}
3、把字符串顺序倒过来
char* reverseString(char* str)
{
assert(str!=NULL);
int length=strlen(str);
for(int i=0;i<length/2;i++)
{
char temp=str[i];
str[i]=str[length-i-1];
str[length-i-1]=temp;
}
return str;
}
4、找字符串里的回数
char *FindString(const char *str)
{
assert(str!=NULL);
int length=strlen(str);
int *numbers=new int[length];
float *index=new float[length];
numbers[0]=numbers[length-1]=1;
index[0]=0;
index[length-1]=length-1;
int left,right;
for(int i=1;i<length-1;i++)
{
left=i-1;
right=i+1;
if(str[left]!=str[right]&&str[left]!=str[i]&&str[i]!=str[right])
{
numbers[i]=1;
index[i]=i;
}
else
{
if(str[left]==str[right])
{
numbers[i]=3;
index[i]=i;
}
else if(str[left]==str[i])
{
numbers[i]=2;
index[i]=(left+i)/2.0;
right=i;
}
else if(str[i]==str[right])
{
numbers[i]=2;
index[i]=(right+i)/2.0;
left=i;
}
while(--left>=0&&++right<length)
{
if(str[left]==str[right])
numbers[i]+=2;
else
break;
}
}
}
int max=numbers[0];
int tempI=0;
for(int i=0;i<length;i++)
{
if(numbers[i]>max)
{
tempI=i;
max=numbers[i];
}
}
char *result=new char[max];
for(int i=0;i<max;i++)
{
int temp=floor(i+index[tempI]-max/2+0.5);
result[i]=str[temp];
}
delete []numbers;
return result;
}
5、替换空格为%20:
char* ChangeString(char* myChar,int length)
{
char* result=new char[length*3];
int count=0;
for(int i=0;i<length;i++)
{
if(myChar[i]==' ')
{
result[count++]='%';
result[count++]='2';
result[count++]='0';
}
else
{
result[count++]=myChar[i];
}
}
result[count]='\0';
return result;
}
6、翻转单词顺序
void Reverse(char* const numbers,int length)
{
char temp;
for(int i=0;i<length/2;i++)
{
temp=numbers[i];
numbers[i]=numbers[length-i-1];
numbers[length-i-1]=temp;
}
}
void PrintReverse(char* const numbers,int length)
{
int i=0;
Reverse( numbers,length);
int letterLen=0,begin=0;i=0;
bool flag=true;
while(numbers[i]!='\0')
{
if(numbers[i]!=' ')
{
flag=true;
letterLen++;
}
else if(flag)
{
if(letterLen>1)
Reverse(numbers+begin,letterLen);
letterLen=0;
begin=i+1;
flag=false;
}
else
begin++;
i++;
}
Reverse(numbers+begin,letterLen);
printf("%s\n",numbers);
}
左旋转字符串
void Reverse(char* const numbers,int length)
{
char temp;
for(int i=0;i<length/2;i++)
{
temp=numbers[i];
numbers[i]=numbers[length-i-1];
numbers[length-i-1]=temp;
}
}
void PrintMov(char* const numbers,int move)
{
int length=strlen(numbers);
move=move%length;
Reverse( numbers,length);
Reverse(numbers,length-move);
Reverse(numbers+length-move,move);
printf("%s\n",numbers);
}
7、第一次只出现一次的字符
int FirstOneCharacter(const char* characters)
{
int appearances[LetterNum]={0};
int result=-1;
if(characters==NULL)
return result;
int length=strlen(characters);
for(int i=0;i<length;i++)
{
appearances[characters[i]-'A']++;
}
for(int i=0;i<length;i++)
{
if(appearances[characters[i]-'A']==1)
{
result=i;
break;
}
}
return result;
}
8、字符串的全排列:
void Permutation(char* source,char *begin);
void Permutation(char* source)
{
int length=strlen(source);
if(source==NULL||length<=0)
return;
Permutation(source,source);
}
int *Sort(char *arrays)
{
int length=strlen(arrays);
char temp;
int *index=new int[length];
int tempIndex;
for(int i=0;i<length;i++)
{
index[i]=i;
}
for(int i=0;i<length;i++)
{
for(int j=i;j<length;j++)
{
if(arrays[j]<arrays[i])
{
temp=arrays[j];
arrays[j]=arrays[i];
arrays[i]=temp;
tempIndex=index[j];
index[j]=index[i];
index[i]=tempIndex;
}
}
}
return index;
}
void Permutation(char* source,char *begin)
{
if(begin[0]=='\0')
printf("%s\n",source);
else
{
int length=strlen(begin);
char *temp=new char[length+1];
int i=0;
char word;
int *index;
temp=strcpy(temp,begin);
index=Sort(temp);
for(;i<length;i++)
{
if(i>0&&temp[i]==temp[i-1])
continue;
swap(begin[0],begin[index[i]]);
Permutation(source,begin+1);
swap(begin[0],begin[index[i]]);
}
delete []temp;
delete []index;
}
}