如何在 Cygwin 中运行多个参数

发布于 2024-09-05 19:11:47 字数 323 浏览 4 评论 0原文

我一直在尝试运行一个程序,该程序将反转字符串的顺序并运行它,我必须在提示符中键入第二个参数。

 int main(int argc, char* argv[])
 {
     string text = argv[2];
     for (int num=text.size(); num>0; num--)
     {
         cout << text.at(num);
     }
     return 0;
 }

例如 ./program lorem 结果:merol

I've been trying to run a program that will invert the order of a string and to run it, I have to type a second argument in prompt.

 int main(int argc, char* argv[])
 {
     string text = argv[2];
     for (int num=text.size(); num>0; num--)
     {
         cout << text.at(num);
     }
     return 0;
 }

e.g. ./program lorem result: merol

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

丢了幸福的猪 2024-09-12 19:11:48

我认为您遇到异常是因为 num 超出范围。 size() 返回一个比字符串中最大有效索引大一的值,因此 at() 抛出异常。

I think you're getting an exception because num is out of bounds. size() is returning a value one larger than the biggest valid index into the string, so at() is throwing an exception.

七婞 2024-09-12 19:11:47
#include <iostream>
#include <string>

using namespace std;

 int main(int argc, char* argv[])
 {
     string text = argv[1];
     for (int num=text.size() - 1; num >= 0; num--)
     {
         cout << text.at(num);
     }
     return 0;
 }

您错过了包含并错误地使用了 string::at 。字符串中有 size() 字符,但从 0 开始计数。然后循环必须运行到 num >= 0 而不是 num > 为止。 0. 您还在 argv 中使用了错误的索引。

这仍然是 C++ 的令人厌恶的事情。更清晰的方法是:

#include <iostream>
#include <string>
#include <algorithm>

int main(int argc, char* argv[])
{
  std::string text = argv[1];
  for(std::string::reverse_iterator it = text.rbegin(); it != text.rend(); ++it) {
    std::cout << *it;
  }
  std::cout << std::endl;
  //or if you want further usage of the reversed string

  std::reverse(text.begin(), text.end());
  std::cout << text;

  return 0;
}
#include <iostream>
#include <string>

using namespace std;

 int main(int argc, char* argv[])
 {
     string text = argv[1];
     for (int num=text.size() - 1; num >= 0; num--)
     {
         cout << text.at(num);
     }
     return 0;
 }

You missed the includes and used string::at wrong. There are size() chars in the string but you start counting at 0. Then the loop has to run until num >= 0 and not num > 0. You also used the wrong index into argv.

This would still be an abomination of C++. A clearer way would be:

#include <iostream>
#include <string>
#include <algorithm>

int main(int argc, char* argv[])
{
  std::string text = argv[1];
  for(std::string::reverse_iterator it = text.rbegin(); it != text.rend(); ++it) {
    std::cout << *it;
  }
  std::cout << std::endl;
  //or if you want further usage of the reversed string

  std::reverse(text.begin(), text.end());
  std::cout << text;

  return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文