1.字符串處理
C++
//字符串拷貝
//思路:確定被拷貝數組的內存大小是否等於目標數組內存大小
//拷貝數組
//目標數組最後一個字符爲空字符'\0'
bool stringcopy(char* str1,char* str2,int len) //指針
{
int i=0;
while(str1[i]!='\0')
{
i++;
}
if(i>len)
{
return false;
}
int j=0;
while(str1[j]!='\0')
{
str2[j]=str[i];
j++;
}
str2[j]='\0';
return true;
}
void printf(char* str1,char* str2) //指針
{
cout<<str1<<endl;
cout<<str2<<endl;
}
int main()
{
char str1[]="sgdhegfchrj";
char str2[20]={0};
stringcopy(str1,str2,20); //調用
printf(str1,str2); //調用
return 0;
}
//字符串連接
//將str1與str2連接—->(將合成的字符串放入str1中)
//思路:確定str1的內存大小是否小於str2+str1-1;
//連接
//連接後的字符串最後一個爲空字符'\0'
bool stringconnection(char* str1,char* str2,int len)
{
int i=0;
int j=0;
while(str1[i]!=0) 判斷字符串內存大小
{
i++;
}
while(str2[j]!=0)
{
j++
}
if(len<i+j-1)
{
return false;
}
int k=0;
while(str2[k]!='\0')
{
str1[i]=str2[k];
i++;
k++;
}
str1[i]='\0';
return true;
}
void printf(char* str1,char* str2)
{
cout<<str1<<endl;
cout<<str2<<endl;
}
int main()
{
char str1[20]="sgdhfg";
char str2[10]="dgfhcd";
stringconnection(str1,str2,20);
printf(str1,str2);
return 0;
}
//將str1與str2連接放入到str3中
//思路:確定str3的大小是否小於str1+str2-1;
//放入str3中(每個字符串一次放入)
//str3最後一個字符爲空字符
bool stringconnection(char*str1,char*str2,char*str3,int len)
{
int i=0;
int j=0;
while(str1[i]!='\0')
{
i++;
}
while(str2[j]!='\0')
{
j++;
}
if(len<i+j-1)
{
return false;
}
//
i=0,j=0;
while(str1[i]!='\0')
{
str3[i]=str1[i];
i++;
}
while(str2[j]!='\0')
{
str3[i]=str2[j];
i++;
j++;
}
str3[i]='\0';
return true;
}
void printf(char* str1,char* str2)
{
cout<<str1<<endl;
cout<<str2<<endl;
}
void printf2(char* str1,char* str2,char* str3)
{
cout<<str1<<endl;
cout<<str2<<endl;
cout<<str3<<endl;
}
int main()
{
char str1[10]="gdhf";
char str2[20]="dgrf";
char str3[30]={0};
stringconnection(str1,str2,str3,30);
printf2(str1,str2,str3);
return 0;
}
//字符串大小寫轉換
//遍歷不是空字符的字符,將其中的大寫字母轉換爲小寫字母
bool stringchange(char* str1,char* str2,int len)
{
//
int i =0;
while(str1[i]!='\0')
{
i++;
}
if(i>len)
{
return false;
}
//
i=0;
while(str1[i]!='\0')
{
if(str1[i]>='A'&&str1[i]<='Z')
{
str2[i]=str1[i]+32;
}
else
{
str2[i]=str1[i];
}
i++;
}
str2[i]='\0';
return true;
}
//
void printf(char*str1,char*str2)
{
cout<<str1<<endl;
cout<<str2<<endl;
}
//
int main()
{
char str1[10]="abfEGB";
char str2[10]={0};
stringcase(str1,str2,10); //len=10
printf(str1,str2);
return 0;
}
//大寫轉小寫,+32
//小寫轉大寫,-32
//二進制方法實現大小寫
bool stringcase(char* str1,char* str2,int len)
{
while(str1[i]!='\0')
{
if(str1[i]>='A'&&str1[i]<='Z')
{
str2[i]=str1[1]|32;
}
else
{
str2[i]=str1[i];
}
i++;
}
str2[i]='\0';
return true;
}
//大寫轉化爲小寫——–>或操作符(|) 和32
// 小寫轉化爲大寫——–>且操作符(&)和95
//字符串比較大小
//思路:判斷兩個字符串長度
//根據長度來分別比較
//長度相同,再根據每個字符比較
int stringcompare(char* str1,char* str2)
{
int i=0,k=0;
while(str[i]!='\0')
{
i++;
}
while(str2[k]!='\0')
{
k++;
}
if(i>k)
{
return 1;
}
else if(i<k)
{
return -1;
}
else
{
i=0;
while(str1[i]!='\0')
{
if(str1[i]!=str2[i])
{
return 1;
}
else
{
return -1;
}
}
i++;
}
return 0;
}
//字符串分割
//思路:直接遍歷字符串中的每個字符
int stringseparated(char* str1,char* separate,char p[][20])
{
int i=0;
int k=0; //二維數組的第k行
int n=0; ////二維數組每行字符
while(str1[i]!='\0')
{
if(str1[i]!=separate)
{
p[k][n]=str1[i];
i++;
n++;
}
else
{
p[k][n]='\0';
i++;
k++;
n=0;
}
}
return k+1;
}
int main()
{
char str1[20]="abc,def,ghi";
char p[4][20]={0};
int x=stringseparated(str1,',',p);
cout<<x<<endl;
}
題目:給定一個字符串,根據字符串內每個字符出現的次數,按照ASCII碼來重新調整字符串輸出。
//輸入:eeefgghhh
//輸出:efghegheh
//思路:統計每個字符出現的次數,把每個字符按照ASC的自然順序排序,如果本次輸出當前字符數量爲0(已經在前面用完了)則不輸出這個字符
//1,2步可以用一個TreeMap實現,鍵值對記錄每個字符的次數,同時TreeMap按照鍵排序(鍵爲字符),則所得順序正好是字符的ASCII碼順序(從小到大)
public static void solve(string str)
{
//定義一個鍵值對
Map<character,integer>map=new treemap<>();
}