日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 复制字符串/字符数组

發布時間:2023/12/18 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 复制字符串/字符数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.




題目

【項目1-小心地放開玩字符串/字符數組】

(2)讀程序,請分析其實現的功能

[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';i++)??
  • ??{????
  • ????if(str1[i]!='?')??
  • ????{??
  • ??????str2[j]=str1[i];??
  • ??????j++;??
  • ????}??
  • ??}??
  • ??str2[j]='\0';//切記!!??
  • ??cout<<"整理后的字符串"<<str2<<endl;??
  • ??return?0;??
  • }??
  • 請自選下面有關字符串中字符統計的任務,完成兩個即可。
    • 復制字符串str1,保存到str2中;
    • 在字符串str2后面增加符號"//comment:"
    • 將str1和str2接起來存放到str3中;
    • 將str1中的空格去除,仍保存在str1中;
    • 將str1和str2接起來,仍存放在str1中;
    • 去除str1中的多余空格(即兩個單詞中間僅保留一個空格)。
    • 在字符串前加5個符號"note:"

    二、參考解答

    1、復制字符串str1,保存到str2中

    [cpp] view plaincopyprint?
  • #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');//如此表達式!循環體為空??
  • ????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');//如此表達式!循環體為空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; }

    2、在字符串str2后面增加符號"//comment:"

    課堂上我提示找到str2的’\0’處,然后逐個賦值,太笨了。現在決定將要增加的字符串在程序中用一個字符串給出來,這是更能通用的辦法。

    [cpp] view plaincopyprint?
  • #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; } 參考的運行結果



    3、將str1和str2接起來存放到str3中;

    [cpp] view plaincopyprint?
  • #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; }

    4、將str1和str2接起來,仍存放在str1中

    [cpp] view plaincopyprint?
  • #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; }


    5將str1中的空格去除,仍保存在str1中

    策略不是去除空格,而是復制非空格字符,不復制空格,這樣,空格掛了。 在現實中,遲到的員工罰款,是一種辦法;還有一種做法,獎勵按時到的員工,遲到的沒有獎。都是獎勤罰懶。

    [cpp] view plaincopyprint?
  • #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; }

    看下面的截圖,理解程序。如果困難,自己單步執行觀察一下。


    6、去除str1中的多余空格(即兩個單詞中間僅保留一個空格)。

    [cpp] view plaincopyprint?
  • #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; }

    7、在字符串前加5個符號"note:"

    [cpp] view plaincopyprint?
  • #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中有len2個字符??
  • ????//找到str1中結尾的位置??
  • ????i=0;??????
  • ????while(str1[i]!='\0')??
  • ????{??
  • ????????i++;??
  • ????}??
  • ????//由后往前,整體往后“搬遷”len2個位置??
  • ????while(i>=0)??
  • ????{??
  • ????????str1[i+len2]=str1[i];??
  • ????????i--;??
  • ????}??
  • ????//空出的前len2位置復制為str2??
  • ????i=len2-1;??
  • ????while(i>=0)??
  • ????{??
  • ????????str1[i]=str2[i];??
  • ????????i--;??
  • ????}??
  • ????cout<<"處理后的字符串是:?"<<str1<<endl;??
  • ????return?0;??
  • }??
  • 總結

    以上是生活随笔為你收集整理的C++ 复制字符串/字符数组的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。