編程題:字符串處理(字符串拷貝、字符串連接、字符串轉移、大小寫轉換、字符串分割、)

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




}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章