[問題] 陣列內中英文字串的反轉(序)
不好意思,這是作業Q3Q(被揍
我研究了好幾天,版上有getline、字串...等好幾十種關鍵字的文章我都看好幾遍了,
Google也估了幾十種了 囧" 結果我還是寫不出來OTL
我們教授要我們去把一個big-5的文字檔讀進程式,然後將每一行自己前後順序反轉後
逐行輸出到文字檔,不過文字檔不是固定的,且內含中英文
我研究到後來才知道中文字串不能直接反轉,所以得去判斷讀進去的是中文還是英數,
我主要是希望用陣列的方式去做,不是用內建的函式(有嗎XD)去做反轉,所以去查了
之後發現可以用判斷16進位的方式去看是不是在範圍內(0x80~0xfe)
我的想法是先將文字檔一行一行讀,先用getline讀進去第一個陣列,
這邊先遇到一個問題,一排句子結尾應該是 ......\n\0這樣嗎? 囧
所以說我用getline去讀他會把\n丟掉,所以我讀進去是 ......\0 這樣
所以之後我使用strlen()取得的陣列內容大小是含著\0 的,
然後我用if和else if來判斷他是不是中文字
我是先把第一個陣列從倒數第二個開始讀,想說這樣就不會讀到\0 了
然後再開始倒著寫入第二個陣列
假設我現在陣列一有讀到內容: a b c 我 d e \0 (8個字元)
然後我開始從陣列一的倒數第二位 e開始讀,然後放到陣列二的第一位,然後
陣列一的倒數第三位 d , 放到陣列二的第二位,然後
陣列一的倒數第四位 我的後面, 放到陣列二的第四位,然後
將陣列一的倒數第五位, 我的前面放到陣列二的第三位,
以這樣的方法一直讀到陣列一的第一位,寫完第二個陣列的第七個位元,
之後我自己將陣列二的第八位補上\0
之後再用.write()寫入一整行,大小是八位元
請問這樣有觀念上的問題嗎(一定有,因為我跑出來結果失敗Q3Q)?
且這樣做好像不會自己換行輸出到檔案,結果變成全部在同一行
=================================
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int main(){
fstream Input, Output;
char info[128];
char infore1[128];
Input.open("input.txt",ios::in|ios::binary);
Output.open("output.txt",ios::out|ios::binary);
//就是用這裡讀進一整行
while(Input.getline(info, 128, '\n')){
for(int i=0;i<strlen(info)-1;i++){
if((unsigned char)info[strlen(info)-2-i]>=0x80 && (unsigned
char)info[strlen(info)-2-i]<=0xfe){
infore1[i+1]=info[strlen(info)-2-i];
infore1[i]=info[strlen(info)-3-i];
i++;
}
else{
infore1[i]=info[strlen(info)-2-i];
}
}
infore1[strlen(info)]='\0'; //補上\0 ,可是好像沒影響
Output.write(infore1,strlen(info));
}
Input.close();
Output.close();
return 0;
}
==============================================
我是用code::block寫的OTL 想請問前輩們,我哪邊觀念有問題(當然有 囧)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.172.248.107
推
03/22 09:17, , 1F
03/22 09:17, 1F
→
03/22 09:43, , 2F
03/22 09:43, 2F
推
03/22 11:09, , 3F
03/22 11:09, 3F
→
03/22 11:53, , 4F
03/22 11:53, 4F
→
03/22 11:53, , 5F
03/22 11:53, 5F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 4 篇):