C++ 复制字符串/字符数组
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                C++  复制字符串/字符数组
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            
 
 
  
   #include<iostream>??  using?namespace?std;??  int?main()??  {??  ??char?str1[50]="I?am?a?happy?boy\'s?daddy.",str2[50];??  ??int?i=0,j=0;??  ??for(i=0;str1[i]!='\0';i++)??  ??{????  ????if(str1[i]!='?')??  ????{??  ??????str2[j]=str1[i];??  ??????j++;??  ????}??  ??}??  ??str2[j]='\0';//切記!!??  ??cout<<"整理后的字符串"<<str2<<endl;??  ??return?0;??  }??    請自選下面有關字符串中字符統(tǒng)計的任務,完成兩個即可。
 #include<iostream>?? using?namespace?std;?? int?main()?? {???char?str1[50]="I?am?a?happy?boy\'s?daddy.",str2[50];?? ????int?i,j;?? ????for(i=0,j=0;str1[i]!='\0';i++)?? ????{???? ????????str2[j]=str1[i];?? ????????++j;?? ????}?? ????str2[j]='\0';//切記!!?? ????cout<<"整理后的字符串"<<str2<<endl;?? ????return?0;?? }??    #include<iostream>
using namespace std;
int main()
{	char str1[50]="I am a happy boy\'s daddy.",str2[50];int i,j;for(i=0,j=0;str1[i]!='\0';i++){  str2[j]=str1[i];++j;}str2[j]='\0';//切記!!cout<<"整理后的字符串"<<str2<<endl;return 0;
}
還可以寫作:
[cpp] view plaincopyprint?#include<iostream>?? using?namespace?std;?? int?main()?? {???char?str1[50]="I?am?a?happy?boy\'s?daddy.",str2[50];?? ????int?i=0,j=0;?? ????for(i=0;str1[i]!='\0';)?? ????{???? ????????str2[j++]=str1[i++];//注意下標處的寫法?? ????}?? ????str2[j]='\0';//切記!!?? ????cout<<"整理后的字符串"<<str2<<endl;?? ????return?0;?? }??    #include<iostream>
using namespace std;
int main()
{	char str1[50]="I am a happy boy\'s daddy.",str2[50];int i=0,j=0;for(i=0;str1[i]!='\0';){  str2[j++]=str1[i++];//注意下標處的寫法}str2[j]='\0';//切記!!cout<<"整理后的字符串"<<str2<<endl;return 0;
}
還可以寫作:
[cpp] view plaincopyprint?#include<iostream>?? using?namespace?std;?? int?main()?? {???char?str1[50]="I?am?a?happy?boy\'s?daddy.",str2[50];?? ????int?i=0,j=0;?? ????while((str2[j++]=str1[i++])!='\0');//如此表達式!循環(huán)體為空?? ????cout<<"整理后的字符串"<<str2<<endl;?? ????return?0;?? }??    #include<iostream>
using namespace std;
int main()
{	char str1[50]="I am a happy boy\'s daddy.",str2[50];int i=0,j=0;while((str2[j++]=str1[i++])!='\0');//如此表達式!循環(huán)體為空cout<<"整理后的字符串"<<str2<<endl;return 0;
}
怕被繞更迷糊了的,不要看下面的程序
[cpp] view plaincopyprint?#include<iostream>?? using?namespace?std;?? int?main()?? {???char?str1[50]="I?am?a?happy?boy\'s?daddy.",str2[50];?? ????int?i=0,j=0;?? ????while(str2[j++]=str1[i++]);??//其實和上面的程序等價?? ????cout<<"整理后的字符串"<<str2<<endl;?? ????return?0;?? }??    #include<iostream>
using namespace std;
int main()
{	char str1[50]="I am a happy boy\'s daddy.",str2[50];int i=0,j=0;while(str2[j++]=str1[i++]);  //其實和上面的程序等價cout<<"整理后的字符串"<<str2<<endl;return 0;
}
 #include<iostream>?? using?namespace?std;?? int?main()?? {?? ????char?str2[50];?? ????char?str[20]={"//注釋:?定義變量"};?? ????int?i=0,j=0;?? ????cout<<"輸入字符串:";?? ????gets(str2);?? ????while(str2[i]!='\0')?? ????{???? ????????i++;?????????? ????}?? ????while(str[j]!='\0')?? ????{?? ????????str2[i++]=str[j++];?? ????}?? ????str2[i]='\0';?? ????cout<<"--------------------------"<<endl;?? ????cout<<"處理后的字符串是:?"<<str2<<endl;?? ????return?0;?? }??    #include<iostream>
using namespace std;
int main()
{char str2[50];char str[20]={"//注釋: 定義變量"};int i=0,j=0;cout<<"輸入字符串:";gets(str2);while(str2[i]!='\0'){  i++;		}while(str[j]!='\0'){str2[i++]=str[j++];}str2[i]='\0';cout<<"--------------------------"<<endl;cout<<"處理后的字符串是: "<<str2<<endl;return 0;
}
參考的運行結果  #include<iostream>?? using?namespace?std;?? int?main()?? {?? ????char?str1[20]={"int?i,a[100];"};?? ????char?str2[20]={"//注釋:?定義變量"};?? ????char?str3[40];?? ????int?i=0,j=0;?? ????while(str1[j]!='\0')??//復制str1?? ????{???? ????????str3[i++]=str1[j++];?? ????}?? ????j=0;????//下面復制str2?? ????while(str2[j]!='\0')?? ????{?? ????????str3[i++]=str2[j++];?? ????}?? ????str3[i]='\0';??//一定要保證str3中有'\0',否則"燙燙燙燙"?? ????cout<<"處理后的字符串是:?"<<str3<<endl;?? ????return?0;?? }??    #include<iostream>
using namespace std;
int main()
{char str1[20]={"int i,a[100];"};char str2[20]={"//注釋: 定義變量"};char str3[40];int i=0,j=0;while(str1[j]!='\0')  //復制str1{  str3[i++]=str1[j++];}j=0;    //下面復制str2while(str2[j]!='\0'){str3[i++]=str2[j++];}str3[i]='\0';  //一定要保證str3中有'\0',否則"燙燙燙燙"cout<<"處理后的字符串是: "<<str3<<endl;return 0;
}   #include<iostream>?? using?namespace?std;?? int?main()?? {?? ????char?str1[40]={"I?am?a?boy."};?? ????char?str2[20]={"//注釋:?廢話一句"};?? ????int?i=0,j=0;?? ????while(str1[i]!='\0')??//找到str1的結束?? ????{???? ????????i++;?? ????}?? ????j=0;????//下面復制str2?? ????while(str2[j]!='\0')?? ????{?? ????????str1[i++]=str2[j++];?? ????}?? ????str1[i]='\0';??//一定要保證str3中有'\0',否則"燙燙燙燙"?? ????cout<<"處理后的字符串是:?"<<str1<<endl;?? ????return?0;?? }??    #include<iostream>
using namespace std;
int main()
{char str1[40]={"I am a boy."};char str2[20]={"//注釋: 廢話一句"};int i=0,j=0;while(str1[i]!='\0')  //找到str1的結束{  i++;}j=0;    //下面復制str2while(str2[j]!='\0'){str1[i++]=str2[j++];}str1[i]='\0';  //一定要保證str3中有'\0',否則"燙燙燙燙"cout<<"處理后的字符串是: "<<str1<<endl;return 0;
}  #include<iostream>?? using?namespace?std;?? int?main()?? {?? ????char?str[40]={"I?am?a?boy."};?? ????int?i=0,j=0;?? ????while(str[j]!='\0')??//找到str的結束?? ????{???? ????????if(str[j]!='?')??? ????????????str[i++]=str[j++];??//如果str[i]不是空格,將復制?? ????????else?? ????????????j++;????//str[j]為空格時,沒有進行復制?? ????????????????//j++而沒有i++,所以只要有空格,j的值一定會大于i的?? ????????????????//不管是否有空格,j一直勇往直前,i則遇空格就休息?? ????}?? ????str[i]='\0';????//str[i]處是復制結束后的位置?? ????cout<<"處理后的字符串是:?"<<str<<endl;?? ????return?0;?? }??    #include<iostream>
using namespace std;
int main()
{char str[40]={"I am a boy."};int i=0,j=0;while(str[j]!='\0')  //找到str的結束{  if(str[j]!=' ') str[i++]=str[j++];  //如果str[i]不是空格,將復制elsej++;    //str[j]為空格時,沒有進行復制//j++而沒有i++,所以只要有空格,j的值一定會大于i的//不管是否有空格,j一直勇往直前,i則遇空格就休息}str[i]='\0';    //str[i]處是復制結束后的位置cout<<"處理后的字符串是: "<<str<<endl;return 0;
}  #include?<iostream>???? using?namespace?std;???? int?main()???? {??? ????char?str[]="Only?????one???space?is????allowed????between???the????two??words.";??? ????cout<<"原始難看的句子:"<<str<<endl;?? ????int?i=0,j=0;?? ????bool?notSpace;?? ????while(str[j]=='?')//忽略開始的若干個空格?? ????????j++;?? ????notSpace=true;????? ????while(str[j]!='\0')?? ????{?? ????????if?(str[j]!='?')??? ????????{?? ????????????notSpace=true;?? ????????????str[i++]=str[j++];?//?不是空格,復制????? ????????}?? ????????else?if?(notSpace)???//是空格,但目前是第一個(因為之前notSpace=true;的條件是遇非空格)?? ????????{?????????????????? ????????????notSpace=false;???//第一個空格仍然要復制?? ????????????str[i++]=str[j++];??????? ????????}?? ????????else???//如遇第二個或更后的空格,正是由于遇到第一個空格并復制后,notSpace=false;的原因,會走到這兒?? ????????{?? ????????????j++;???//不復制?? ????????}?? ????}?? ????str[i]='\0';?? ????cout<<"整理后的句子是:"<<str<<endl;?? ????return?0;?? }???    #include <iostream>  
using namespace std;  
int main()  
{ char str[]="Only     one   space is    allowed    between   the    two  words."; cout<<"原始難看的句子:"<<str<<endl;int i=0,j=0;bool notSpace;while(str[j]==' ')//忽略開始的若干個空格j++;notSpace=true;   while(str[j]!='\0'){if (str[j]!=' ') {notSpace=true;str[i++]=str[j++]; // 不是空格,復制   }else if (notSpace)   //是空格,但目前是第一個(因為之前notSpace=true;的條件是遇非空格){                notSpace=false;   //第一個空格仍然要復制str[i++]=str[j++];     }else   //如遇第二個或更后的空格,正是由于遇到第一個空格并復制后,notSpace=false;的原因,會走到這兒{j++;   //不復制}}str[i]='\0';cout<<"整理后的句子是:"<<str<<endl;return 0;
} 
 #include<iostream>?? using?namespace?std;?? int?main()?? {?? ????char?str1[40]={"I?am?a?boy."};?? ????char?str2[20]={"note:"};?? ????int?i=0,len2=0;?? ????//下面將把str2插入到str1的開頭部分,并且保存在str1中?? ????//先求出str2的“長度”?? ????while(str2[len2]!='\0')?? ????{???? ????????len2++;?? ????}????? ????//str2中有l(wèi)en2個字符?? ????//找到str1中結尾的位置?? ????i=0;?????? ????while(str1[i]!='\0')?? ????{?? ????????i++;?? ????}?? ????//由后往前,整體往后“搬遷”len2個位置?? ????while(i>=0)?? ????{?? ????????str1[i+len2]=str1[i];?? ????????i--;?? ????}?? ????//空出的前l(fā)en2位置復制為str2?? ????i=len2-1;?? ????while(i>=0)?? ????{?? ????????str1[i]=str2[i];?? ????????i--;?? ????}?? ????cout<<"處理后的字符串是:?"<<str1<<endl;?? ????return?0;?? }?? 
                            
                        
                        
                        題目
【項目1-小心地放開玩字符串/字符數(shù)組】
(2)讀程序,請分析其實現(xiàn)的功能
 
- 復制字符串str1,保存到str2中;
 - 在字符串str2后面增加符號"//comment:"
 - 將str1和str2接起來存放到str3中;
 - 將str1中的空格去除,仍保存在str1中;
 - 將str1和str2接起來,仍存放在str1中;
 - 去除str1中的多余空格(即兩個單詞中間僅保留一個空格)。
 - 在字符串前加5個符號"note:"
 
二、參考解答
1、復制字符串str1,保存到str2中
[cpp] view plaincopyprint?
還可以寫作:
[cpp] view plaincopyprint?
還可以寫作:
[cpp] view plaincopyprint?
怕被繞更迷糊了的,不要看下面的程序
[cpp] view plaincopyprint?
2、在字符串str2后面增加符號"//comment:"
課堂上我提示找到str2的’\0’處,然后逐個賦值,太笨了?,F(xiàn)在決定將要增加的字符串在程序中用一個字符串給出來,這是更能通用的辦法。
 
 
 
3、將str1和str2接起來存放到str3中;
[cpp] view plaincopyprint?4、將str1和str2接起來,仍存放在str1中
[cpp] view plaincopyprint?
 
5、將str1中的空格去除,仍保存在str1中
策略不是去除空格,而是復制非空格字符,不復制空格,這樣,空格掛了。 在現(xiàn)實中,遲到的員工罰款,是一種辦法;還有一種做法,獎勵按時到的員工,遲到的沒有獎。都是獎勤罰懶。[cpp] view plaincopyprint?
看下面的截圖,理解程序。如果困難,自己單步執(zhí)行觀察一下。
 
6、去除str1中的多余空格(即兩個單詞中間僅保留一個空格)。
[cpp] view plaincopyprint?
7、在字符串前加5個符號"note:"
[cpp] view plaincopyprint?總結
以上是生活随笔為你收集整理的C++ 复制字符串/字符数组的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 栈中函数调用原理_详解
 - 下一篇: 视频编解码技术小结