【问题标题】:searching length of sting in arg[]在 arg[] 中搜索字符串的长度
【发布时间】:2022-02-11 15:51:26
【问题描述】:

我正在尝试从 char argv 数组中获取字符串长度,但我不知道如何检查。

我正在向控制台写 3 个单词,例如:红蓝黄。 然后我想写出“黄色”,但我不知道该怎么做。 我试图将单词保存在文件中,但文件中没有退格键,这看起来是: 红蓝黄

#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 
int main(int argc,char* argv[]) { 
    string temp; 
    fstream save; 
    string tab[argc]; 
    for(int i=1; i<argc; i++) { 
        if(argv[i]==' ') { 
            tab[argv]=tab[i]; 
        }
    } 
    return 0; 
}

【问题讨论】:

    标签: c++ argv argc


    【解决方案1】:

    线

    string tab[argc]; 
    

    不是有效的 ISO C++,因为数组的长度必须是编译时常量。不过,一些编译器可能支持 variable-length arrays 作为扩展。

    但是,可以将 C 风格的 argv 字符串转换为 std::vectorstd::string。有关详细信息,请参阅此问题:

    Convert command line argument to string

    在您的代码中,行

    if(argv[i]==' ') { 
    

    没有意义,因为您正在将指向字符串的指针与字符文字进行比较。


    如果你这样调用你的程序

    myprogramname red blue yellow
    

    那么以下将适用:

    • argc 的值为 4
    • argv[0] 将指向包含 myprogramname 的字符串
    • argv[1] 将指向包含 red 的字符串
    • argv[2] 将指向包含 blue 的字符串
    • argv[3] 将指向包含 yellow 的字符串
    • argv[4] 的值为 NULL

    因此,如果你想打印yellow,你可以简单地写

    std::cout << argv[3] << '\n';
    

    如果要打印字符串yellow的长度,可以简单写

    std::cout << std::strlen( argv[3] ) << '\n';
    

    请注意,您必须#include &lt;cstring&gt; 才能使用std::strlen

    或者,您可以先将argv[3] 转换为std::string,而不是使用std::strlen,然后再获取其长度:

    std::string str{ argv[3] };
    std::cout << str.length() << '\n';
    

    如果您想写入文件,例如写入程序中名称为savestd::fstream,则可以在上面的代码中将std::cout 替换为save。但是,您必须先打开该文件,然后才能使用它。此外,您可能需要考虑使用std::ofstream 而不是std::fstream,因为您似乎只想将文件用于写入而不是读取。

    【讨论】:

    • 谢谢你,但是如何从这个数组中得到最长的单词?例如我想打印黄色,但我不知道我是如何尝试使用 argv[I].length() 和 argv[I].size()
    • @BartekSacha:调用 length()size() 将无法处理 C 样式的字符串(即以空字符结尾的字符数组)。它只适用于 C++ 字符串(即std::string)。因此,如果您想使用这些函数,您首先必须将各个 C 风格的字符串转换为 std::string。在我的回答的两个地方,我向您展示了如何做到这一点。或者,您可以在 C 风格的字符串上使用 std::strlen。我还在回答中向您展示了如何做到这一点。
    猜你喜欢
    • 2023-03-30
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多