2014-04-03 35 views
0

读取文本文件并将文本文件中的令牌放入2-D矩阵中时出现问题。读取文本文件并将令牌放入2D矩阵中的问题

这里是我的代码:

std::vector< vector <std::string> > my_matrix(10, vector <std::string>(10)); 

ifstream myReadFile; 
myReadFile.open("class_data.txt", ios_base::in); 
char output[100]; 
if (myReadFile.is_open()) { 
    if (!myReadFile.eof()) { 
     myReadFile >> output; 

     char* token = NULL; 
     char* context = NULL; 
     char delims[] = " ,\t\n"; 

     token = strtok_s(output, delims, &context); 

     if (token != NULL) 
     { 
      for (int i = 0; i < 10; i++) { 
       for (int j = 0; j < 10; j++) { 
        my_matrix[i][j] = *token; 
        cout << "token = " << token << endl; 
        cout << "matrix = " << my_matrix[i][j] << endl; 
        token = strtok_s(NULL, delims, &context); 
       } 
      } 
     } 
    } 
} 

std::cout.width(3); std::cout << left << "ID"; 
std::cout.width(9); std::cout << left << "Project1"; 
std::cout.width(9); std::cout << left << "Project2"; 
std::cout.width(9); std::cout << left << "Project3"; 
std::cout.width(9); std::cout << left << "Project4"; 
std::cout.width(9); std::cout << left << "Project5"; 
std::cout.width(9); std::cout << left << "Project6"; 
std::cout.width(9); std::cout << left << "Project7"; 
std::cout.width(9); std::cout << left << "Midterm"; 
std::cout.width(9); std::cout << left << "Final" << std::endl; 
std::cout << "-------------------------------------------------------------------------------" << std::endl; 

for (int i = 0; i < 10; i++) { 
    for (int j = 0; j < 10; j++) { 
     cout.width(10); std::cout << my_matrix[i][j]; 
    } 
    std::cout << " " << std::endl; 
} 

我没有错误,它编译,但该程序还当我想显示2-d矩阵,它不会显示出来。它对整个矩阵没有任何价值。

任何人都可以帮助我,告诉我什么是问题?这是否与我为循环2做的方式一样,还是我阅读文本文件的方式?如果发现问题,任何人都可以提出解决方案。

P.S对不起,如果我没有最好的专业代码,但我是C++初学者,我没有参加任何大学水平的编程课程。

+0

你能否展示输入数据的外观? –

+0

classdata.txt contains this text:A00529154 76 79 85 91 75 80 90 56 58 A00656624 79 85 0 86 86 76 51 89 92 A02507691 47 94 92 49 77 72 25 25 95 A00612352 41 82 90 58 87 0 50 98 80 A04012435 91 50 78 68 70 60 42 74 85 A00654400 47 94 89 75 80 76 0 71 83 A00577109 44 88 84 86 89 88 99 100 90 A00580920 41 82 80 90 89 97 93 84 86 A04028610 90 90 90 90 90 90 90 90 90 A04063494 90 90 90 90 70 90 90 90 90 –

回答

1

您已经有了一个10×10矩阵的strtok返回一个char *为当前的道理,只是把它传递给的std :: string运算符=在矩阵是这样的:

my_matrix[i][j] = token; 

您还需要重新思考循环中的逻辑。在内部for strtok调用之后,为返回值添加一个检查,如果它为NULL,则从两个循环中断开。用if测试替换while循环。

编辑:

我看你改变了,而到如果,但是,2 for循环需要一点点变化了。我建议这样的:

for (int i = 0; i < 10 && token; i++) { 
    for (int j = 0; j < 10 && token; j++) { 
     my_matrix[i][j] = token; // NOTE: not *token here 
     cout << "token = " << token << endl; 
     cout << "matrix = " << my_matrix[i][j] << endl; 
     token = strtok_s(NULL, delims, &context); 
    } 
} 

这个改变也使循环中的if测试成为不必要的。

+0

谢谢你的回答,我会在今天晚些时候尝试,我会在几个小时内回复你 –

+0

谢谢,现在一切正常。 –

+0

Hi @DNT。你以前帮过我,你能再帮我一次吗,这次我有一个不同的问题。你可以看看http://stackoverflow.com/questions/23233993/how-to-declare-a-font-variable-properly或http://stackoverflow.com/questions/23189706/how-to-use-字体作为一个变量,请你能告诉我如何正确地做到这一点? –

相关问题