真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++國名排序之字符指針數(shù)組-創(chuàng)新互聯(lián)

題目

請(qǐng)編程實(shí)現(xiàn)對(duì)n個(gè)國家的國名,按照字母順序升序排序

成都網(wǎng)站建設(shè)、做網(wǎng)站,成都做網(wǎng)站公司-成都創(chuàng)新互聯(lián)已向上1000家企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營銷等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。

想法一,

用字符數(shù)組存儲(chǔ)n個(gè)國家的國名,排序后輸出

想法二,

用n行m列的二維數(shù)組(m為最長(zhǎng)國名長(zhǎng)度),排序后輸出

上述兩種方法都涉及到字符串的交換,每一個(gè)字符串,都要依次交換到另一字符串所在的空間中,極大地浪費(fèi)了空間和運(yùn)行效率

題目:

所以,請(qǐng)同學(xué)們用n行m列的二維數(shù)組存儲(chǔ)n個(gè)國家的國名,然后用長(zhǎng)度為n的字符指針數(shù)組存儲(chǔ)國名首地址,對(duì)字符指針數(shù)組進(jìn)行排序

輸入n表示n個(gè)國家,再輸入n行字符串表示對(duì)應(yīng)國家國名

代碼

錯(cuò)誤代碼示例

#include#include//scanf()
using namespace std;

int main()
{
    int n;
    cin>>n;//n個(gè)國名
    char a[n][50];//定義二維字符數(shù)組
    for(int i = 0; i< n; i++)
        scanf("%s", a[i]);//每個(gè)國名作為字符串輸入

    char (*p)[50];//p為行指針
    p = a;//用二維數(shù)組的行地址初始化
    //int *p[50]則p為列指針
    string temp;
    for(int i = 0; i< n-1; i++)
    {
        if(a[i].compare(a[i+1]) >0)//這行報(bào)錯(cuò)了
        {
            temp = a[i];
            a[i] = a[i+1]
            a[i+1] = temp;
        }
    }
    for(int i = 0; i< n; i++)
        cout<

分析:

錯(cuò)誤1

第19行報(bào)錯(cuò) error: request for member 'compare' in 'a[i]', which is of non-class type 'char [50]'?

意思是a[i]并非string對(duì)象,無法對(duì)其使用成員函數(shù)compare。它相當(dāng)于const char[50]這樣的字符指針常量

錯(cuò)誤2

第19~23行,代碼直接對(duì)二維字符數(shù)組a進(jìn)行排序但是a[i] = a[i + 1]和a[i + 1] = temp在這里是錯(cuò)誤的

注意!這是個(gè)二維數(shù)組,不是一維,在一維數(shù)組中表示元素的a[i]和*p這些,在二維數(shù)組卻表示一維中的數(shù)組首地址,也就是一維數(shù)組名。

此處表示用一維數(shù)組名a[i + 1]賦值給另一個(gè)一維數(shù)組名a[i],數(shù)組名不允許被賦值

正確代碼:

#include#include//strcmp()
using namespace std;

int main()
{
    int n;
    cin>>n;//n個(gè)國名
    char a[n][50];//定義二維字符數(shù)組
    for(int i = 0; i< n; ++i)
        cin>>a[i];//每個(gè)國名作為字符串輸入

    //定義字符指針數(shù)組pnames,用于存儲(chǔ)國名首地址
    char *pname[n];
    for(int i = 0; i< n; ++i)
        pname[i] = a[i];//將國名首地址存入字符指針

    //用冒泡排序?qū)ψ址羔様?shù)組進(jìn)行排序
    for(int i = 0; i< n - 1; ++i)
        for(int j = 0; j< n - i - 1; ++j)
            if(strcmp(pname[j], pname[j + 1]) >0)
            {
                char *t = pname[j];
                pname[j] = pname[j + 1];
                pname[j + 1] = t;
            }

    for(int i = 0; i< n; ++i)
        cout<

第21行的if(strcmp(pname[j], pname[j + 1]) >0)

還可修改成

if((string(pname[j])).compare(pname[j + 1]) >0) 此處強(qiáng)制類型轉(zhuǎn)換

str1.compare(str2)? 頭文件#include

輸入輸出

8
China
America
England
Russia
SouthKarea
NorthKarea
India
Austrilia
America Austrilia China England India NorthKarea Russia SouthKarea

頭文件cstring中的strcmp(string1, string2)函數(shù),?對(duì)兩個(gè)字符串每個(gè)字符的ASCII值進(jìn)行比較,若string1 >string2則返回正數(shù),string1< string2返回負(fù)數(shù),兩字符串相等返回0

補(bǔ)充知識(shí)點(diǎn):

1,C++中,字符串應(yīng)該用" ",單個(gè)字符用' ',如果字符串用了' '可能會(huì)警告warning: character constant too long for its type,也可能會(huì)報(bào)錯(cuò)error: no match function for call to...

2,使用指針的優(yōu)點(diǎn):可直接操縱內(nèi)存地址,提高編譯效率,節(jié)省空間

3,cstring相當(dāng)于C語言中的string.h,

而string頭文件:

#include

string str = "abcd";

(1)str.length() 和 str.size()? 返回字符串長(zhǎng)度

(2)str.clear()? 清空str中所有元素

(3)str.insert(n, str2)? 在第n個(gè)位置(從0開始)插入str2

(4)str.find(str2)? 返回子串第一次出現(xiàn)的位置,若不存在,返回-1

(5)str.replace(n, length, str2) 把字符串第n個(gè)位置(從0開始)長(zhǎng)度為length的子串替換為str2

請(qǐng)看代碼效果

#include#includeusing namespace std;

int main()
{
    string str;
    str = "I love you";
    cout<

輸出

10

ugh you are so nasty!!!
9
ugh please do not be so nasty!!!
總結(jié)

指針確實(shí)很難,還老出錯(cuò),所以迎難而上,難上加難唄
現(xiàn)在2022/12/19? 1:21,還有24分鐘加時(shí)賽結(jié)束

嗨起來

是點(diǎn)球大戰(zhàn) 2022/12/19? 1:46

法國第二球沒進(jìn)...

法國第三球沒進(jìn)...

阿根廷第4球進(jìn)了...姆巴佩很遺憾

爺青結(jié)

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


當(dāng)前題目:C++國名排序之字符指針數(shù)組-創(chuàng)新互聯(lián)
URL鏈接:http://weahome.cn/article/djssji.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部