从整数中移除前导 %

3

这里只有一个简单的问题:我有一个char ** argv[],它保存了我的所有参数……在其中一个参数中,我取得一个以 % 开头的整数。

例如:

bg %2

我只想要这个整数……有没有简单的方法获取它?

这是为了作业,所以如果有人能给我指点方向,我愿意做更多的挖掘。

谢谢


你需要 argv[n]+1 (然后将其转换为 int,再传递给类似于 atoi 或(更好的选择)strtol 的函数)。 - Jerry Coffin
你希望这个数字始终是一位数还是可以是多位数?%23657? - Fantastic Mr Fox
2个回答

2
这里有一种使用C++方法的方式:
假设您在列表char** argv[]中拥有一个char*,则可以这样做:
std::string tempString(argv[the one with the %]);
int position = tempString.find_first_of('%');
int = atoi(tempString.substr(position, tempString.size()-position).c_str());

简要说明:第一行将char*转换为std::string,第二行获取%的位置,第三行获取数字的子字符串(假设它在char*的末尾),将其转换回char*并通过atoi传递以获取int

希望这能帮到您。


每次我看到有人提交现成的代码来解决作业问题,我都会感到非常沮丧。当一个人能够编写代码时,他或她应该足够聪明,不要提交它,而是解释它。这些人(例如你)只是想破坏其他学生吗? - Cheers and hth. - Alf
@Cheersandhth.-Alf 抱歉,伙计,我并不是有意冒犯你,我也解释了答案的工作原理。此外,这段代码基本上是伪代码。当人们在互联网上无法控制自己的情绪时,我会感到非常沮丧。 - Fantastic Mr Fox
不用担心 - 我保证我可以写这种东西,只是我刚接触c++,希望有类似atoi的东西。感谢您的帮助。我知道不能直接复制,这个我没有这样做。 - Mizmor
@Cheersandhth.-Alf 看起来 OP 对此没有意见。我注意到你没有评论 dasblinkenlight 的帖子。我认为你是那些在网站上寻找相对较新的人并攻击他们的帖子以让自己感觉更好的人之一。我敢打赌你真的很矮。 - Fantastic Mr Fox

0

这里有一种使用atoi的方法:

for (int i = 0 ; i != argc ; i++) {
    if (argv[i][0] == '%') {
        int num = atoi(&argv[i][1]);
        printf("Got a number: %d\n", num);
    }
}

这不是假设%在字符串的开头吗?但是OP在他的示例中并不总是这样。此外,这是否适用于多个数字? - Fantastic Mr Fox
@Ben OP已经展示了传递给他的程序的所有参数。这意味着argv将在不同的索引处包含“bg”和“%2”。 - Sergey Kalinichenko
因为参数始终在相同的位置,这使我能够使用atoi并将其用于我所需的内容。谢谢! - Mizmor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接