これは少し私を困惑させた質問です。私はデリミタ"+"
と" "
でstrtokを使ってトークン化している多くの複素数を含むアスキーファイルを入力しています。ファイルは次の形式です:[[[0+0i 0+0i 0+0i 0+0i.......]]]
。私は、最初のトークンが0
であり、2番目のトークンが0i
であると期待しています。私は実際に最初のトークンとして"0,0i"
を取得しています。次のコードが使用されています:strtok()は予期しない結果を示しています
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char data[]={0};
int line = 0;
char *datap[231000];
int i,n;
void main()
{
FILE * filei = fopen("signal_subband_16.ascii","r");
FILE * fileo = fopen("Output_file_simple.txt","a");
if(filei==NULL){
printf("There was an error opening the input file");
exit(1);
}
else if(fileo==NULL){
printf("There was an error opening the output file");
exit(1);
}
else{
while(fgets(data,999999,filei)){
line ++;
// printf("Line: %d -> %s", line, data);
}
}
datap[0]=strtok(data,"[+");
n = 1;
while(datap[n-1]!=NULL){
datap[n] = strtok(NULL,"i+");
n++;
}
//for(i=0;i<n;i+2){
// printf("%s %s\n", datap[i], datap[i+1]);
//}
printf("%s\n, %s\n",datap[0], datap[1]);
fclose(filei);
fclose(fileo);
}
正しい答えにはどんなヘルプやプッシュがあれば幸いです。 おかげ
NEW CODE FUNCTIONAL
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char data[999999];
int line = 0;
char *datap[231000];
int i,n;
void main()
{
FILE * filei = fopen("signal_subband_16.ascii","r");
FILE * fileo = fopen("Output_file_simple.txt","a");
if(filei==NULL){
printf("There was an error opening the input file");
exit(1);
}
else if(fileo==NULL){
printf("There was an error opening the output file");
exit(1);
}
else{
while(fgets(data,999999,filei)){
datap[0]=strtok(data,"[ +");
n = 1;
while(datap[n-1]!=NULL){
datap[n] = strtok(NULL,"i +]");
n++;
}
for(i=0;i<n;i+2){
printf("%s %s\n", datap[i], datap[i+1]);
}
memset(data,0,999999);
line ++;
}
}
fclose(filei);
fclose(fileo);
}
[最小限のテストケース](https://stackoverflow.com/help/mcve)を構築できますか? –
こんにちはオリバー私は残念ながらそれは正常に実行されています。これは、最小限のテストケース の#includeの#include の#include char配列[25] = "[[[0 + 0iの0 + 100I 45 + 234I]]]" です。 char * arrayp [25]; int n、i; n = 1; while(arrayp [n-1]!= NULL){ arrayp [n] = strtok(NULL、 "+ i"); n ++; } (i = 0; i
最小のテストケースであれば、そのコードで質問を更新してください;) –