std :: string数组元素访问

时间:2012-04-04 22:04:27

标签: c++ visual-studio-2010 multidimensional-array stdstring

尽管是项目Euler计划,但以下代码实际上并没有太多关注。我想添加50个100位数字,我将每个数字的每个数字分配给数组加数[100] [50]中的元素。然后我会单独添加每个数字/位置,并携带额外的数字。这些数字是从名为Input.txt的文本文件中读取的,它只包含所有数字。 http://projecteuler.net/problem=13

我无法从文件输入流(string numbers[100][50])向字符串数组(<fstream>)的元素分配字符。问题在评论中有更完整的描述:

“[对于第一个循环]这个循环为字符串数组中的每个字符串分配一个数字。即使第二个数字(50)没有做任何事情(它似乎被std :: string覆盖;参见变量声明),它需要在那里循环才能工作。循环的“逻辑”相同;“j”什么都不做,但需要在那里让循环工作?“

而且,(对于第二个循环)“此循环从相应的字符串数组元素填充”addends [100] [50]“数组。如果我尝试使用数组”数字“调用”char_to_int()“ [i] [j]“,编译器抱怨输入不是正确的数据类型。添加变量”k“使循环工作一次,但最终在第二次循环崩溃(使用”numbers [i ] [j] [k]“)。所以我尝试了”char_to_int((numbers [i] [j])。c_str())“,但编译器抱怨”const char *“与”char“不兼容。一个指针解决了这个问题(“char_to_int(*((numbers [i] [j])。c_str()))”),但程序仍然会崩溃。“我拿出了一些无关紧要的代码,以使其更具可读性。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;
int char_to_int(char chInput);

int main()
{

    int placeholder;    //so console doesn't close immediately upon finish
    int sum[102] = {0}; // 100+2, 100 places + 2 places from carrying over
    int addends[100][50] = {0};
    string numbers[100][50];
    ifstream input("Input.txt");

    /* This loop assigns a number to every string in the string array. Even
     * though the second number (50) doesn't do anything (it seems to be
     * overridden by std::string; see variable declaration), it needs to be
     * there for the loop to work. Same "logic" for the loop; "j" doesn't do
     * anything but needs to be there??? Confused :-\
     */
    for (int i = 0; i < 100; i++)
        for (int j = 0; j < 1; j++)
            getline(input, numbers[i][j]);

    /* This loop fills in the "addends[100][50]" array from the corresponding
     * string array element. If I try to call "char_to_int()" with the array
     * "numbers[i][j]", the compliler complains that the input isn't of the
     * right data type. Adding a variable "k" makes the loop work for one run,
     * but eventually crashes on the second loop (using "numbers[i][j][k]").
     * So I tried "char_to_int((numbers[i][j]).c_str())", but the compiler
     * complains that "const char *" is incompatible with "char". Adding a
     * pointer resolves the issue ("char_to_int( *( (numbers[i][j]).c_str() ) )"),
     * but the program still crashes on the second loop through.
     */
    for (int i = 0; i < 100; i++)
        for (int j = 0; j < 50; j++)
            for (int k = 0; k < 1; k++) //used when the variable "k" was being used
                addends[i][j] = char_to_int( (numbers[i][j]).c_str() );

    return 0;
}

代码未完成;我决定反对继续,因为我(显然)需要先解决这个问题。

1 个答案:

答案 0 :(得分:3)

使用

编译并运行良好
string numbers[100];

for (int i = 0; i < 100; i++)
        getline(input, numbers[i]);

for (int i = 0; i < 100; i++)
    for (int j = 0; j < 50; j++)
            addends[i][j] = char_to_int( (numbers[i][j]));

删除stdafx.h包含并定义char_to_int

std::string本身包含一个字符数组,因此您只需要一个std::string s的一维数组。然后,您可以通过[]索引

访问字符串的字符
numbers[i][j]

获取数组numbers中第i个字符串的第j个字符(字节,而不是字节)。