promotion image of download ymail app
Promoted
WEN asked in 電腦與網際網路程式設計 · 1 decade ago

string 陣列如何轉char陣列

#include <iostream.h>

#include <stdio.h>

#include <fstream>

#include <string>

#include <iomanip.h>

#include <stdlib.h>//轉換數值的標頭檔

#include <math.h>

string str[45][6];

char Loc[45];

for(int z=0;z<45;z++)

{

Loc[z]=(char)str[z][3];

}

可是強制型態不能換= " =

Error E2031 C:\Borland\BCC55\Bin\code\sic14.cpp 103: Cannot cast from 'string' to 'char' in function main()

出現這個...有人可以幫我解答一下嗎

Update:

呃..我是在寫SIC.

所以.string str[45][6];存我的內容.

我將instruction固定存到.str[X][3]裡.

可是我現在要計算Location...

所以要把一開始START 1000的1000轉成10進位

再去算LOCATION.可是我的string不知道要怎樣轉.

才能去做加法...

可以在說明一下嗎

2 Answers

Rating
  • Walala
    Lv 5
    1 decade ago
    Favorite Answer

    你一開始寫的已經有點奇怪了, 要先弄清一下: 你宣告 string str[45][6], 你想要的是45個字串陣列, 每個字串長度6, 還是 45x6 也就是270個字串呢? 如果是前者, 那你應該要宣告 string str[45]就好了

    再來, 你宣告 char Loc[45], 你可以說是一個字串, 或者是 45個字元的陣列

    接著 str[z][3], 你強制把他轉為字元, 所以看起來你認為 str[z][3] 應該可以轉成字元, 這也是我一開始懷疑你宣告錯誤的原因, 因為 string str[45][6], 那麼每個元素其實都是字串, 你不可能把字串變成某個字元

    如果你的目的是要45個字串, 然後把每個字串的第4個字元(陣列是從0開始的)copy出來, 那可以改成:

    string str[45];

    char Loc[46]=""; // 如果你最後要把 Loc 印出來, 最好還是宣告大一點(放NULL), 而且清成空的, 才不會出錯

    char temp[100]; // 我利用這個變來存放 string 轉過來的字元陣列

    for(int z=0; z<45; z++) {

    // 這裡兩個重點, 一個是 string 轉 char *, 一個是用 strncpy 作copy 動作, 這樣可以指定長度, 才不會超過 temp

    strncpy(temp, str[z].c_str(), sizeof(temp));

    Loc[z]=temp[3];

    }

    2007-06-16 11:45:31 補充:

    對了, 如果你真的是要 45x6 個字串, 那你 Loc 的宣告就錯了, 因為 Loc 只有45個字元而已

    2007-06-17 13:41:01 補充:

    我只會寫C ,我不知道什麼是SIC, 不過如果你要把string變成數字的話, 可以試試以下作法

    strncpy(temp, str[z].c_str(), sizeof(temp)); // 如果你的 library 沒有 strncpy() 可以用的話, 就把 temp 宣告大一點

    int temp_int= atoi(temp); 就可以轉數字了

    • Commenter avatarLogin to reply the answers
  • 1 decade ago

    字串是由一堆字元組成,把字串設定給字元是不通的,

    如果你把字串的某個字元設定給字元變數就可以了,

    例如:

    Loc[z]=str[z][3][0];

    把str[z][3]這個字串的第1個字元設定給字元Loc[z]

    Loc[z]=str[z][3][1];

    把str[z][3]這個字串的第2個字元設定給字元Loc[z]

    ......

    依此類推

    • Commenter avatarLogin to reply the answers
Still have questions? Get your answers by asking now.