如何从命令行参数中读取多个文本文件并将其转换为字符串?

时间:2014-10-24 02:24:41

标签: c++ text argv

我有一个任务,我必须从命令行读取3个文本文件(它们都是一行长),并将它们转换为字符串。我怎么能这样做?我试过这样做:

#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main (int argc, char *argv[])
{
    string mouse_dna = argv[1];
    string human_dna = argv[2];
    string unknown_dna = argv[3];

但我不认为这是正常的。另外,我必须确定每个字符串的长度,但是像这样使用strlen:

int len = strlen(mouse_dna);

只返回一个错误,说“无法将'std :: string {aka std :: basic_string}'转换为'const char *',参数'1'为'size_t_strlen(const_char *)'

我非常感谢任何帮助!!谢谢!

3 个答案:

答案 0 :(得分:2)

strlen()用于查找C风格字符串的长度。您正在使用C ++字符串,所以这样做:

size_t mouse_len = mouse_dna.length(); // or .size(), same thing

答案 1 :(得分:0)

你需要做的是这样的事情:

String mouse_dna = new String();
for (int i = 0; argv[1][i] != 0; i++) mouse_dna += argv[1][i];

当然,您需要检查argc&gt; = 3。

答案 2 :(得分:-1)

文本文件在哪里以及何时将它们放入数组中?为什么在将命令行文件转换为字符串时使用strlen()甚至不起作用? strlen()如何帮助?请告诉我我想要修复什么?非常混乱没有帮助...

//编辑

我找到了你的问题。 argv [1]为NULL,当您尝试将其放入std :: string

时会出现此错误

在抛出&#39; std :: logic_error&#39;的实例后终止调用   what():basic_string :: _ S_construct null无效

代码 -

#include <iostream>
#include <string>
#include <cstring>

using namespace std;
int main (int argc, char *argv[])
{

    if(argc > 1)
    {

        string mouse_dna = argv[1];
        string human_dna = argv[2];
        string unknown_dna = argv[3];
        cout << mouse_dna;
        cout << human_dna;
        cout << unknown_dna;
    }
    return 0;
}

只要一个argv [1]不等于NULL,它就可以解决了。

http://ideone.com/keEtwl - 检查我的代码和错误消息