使用 C++ 拆分字符串 [重复]

Posted

技术标签:

【中文标题】使用 C++ 拆分字符串 [重复]【英文标题】:Split String using C++ [duplicate] 【发布时间】:2013-04-26 18:20:26 【问题描述】:

我在使用纯 C++ 拆分字符串时遇到问题

字符串总是这样

12344//1238

第一个 int 然后 // 然后是第二个 int。

需要帮助来获取两个 int 值并忽略 //

【问题讨论】:

什么样的问题?您可能想查看右侧的第一个相关链接。 我不知道如何拆分字符串以获得两个 int 并忽略 // 你想用这个字符串做什么?有代码吗? 【参考方案1】:
string org = "12344//1238";

size_t p = org.find("//");
string str2 = org.substr(0,p);
string str3 = org.substr(p+2,org.size());

cout << str2 << " "<< str3;

【讨论】:

将分隔符定义为字符串似乎更好。然后做p+sep.size() 而不是(脆弱的)p+2 谢谢,效果很好!它成功了!!!! @Madbreaks 我这样做是因为 OP 说字符串始终采用这种格式。只是为了简单起见。【参考方案2】:

为什么我们不能使用 sscanf?

char os[20]="12344//1238";
int a,b;
sscanf(os,"%d//%d",a,b);

Reference

【讨论】:

【参考方案3】:

看看strtok函数

【讨论】:

我不介意被否决,但请说出原因 它可能比 C++ 更多 C,并且可能不是线程安全的,但它确实拆分字符串。 感谢@chris,我同意更标准的 C。但由于 C++ 是 C 的超集,因此使用它是完全合法的。【参考方案4】:

这应该拆分并转换为整数:

#include <iostream>
#include <sstream>
#include <string>
#include <stdexcept>

class BadConversion : public std::runtime_error 
public:
  BadConversion(std::string const& s)
    : std::runtime_error(s)
     
;

inline double convertToInt(std::string const& s,
                              bool failIfLeftoverChars = true)

  std::istringstream i(s);
  int x;
  char c;
  if (!(i >> x) || (failIfLeftoverChars && i.get(c)))
    throw BadConversion("convertToInt(\"" + s + "\")");
  return x;


int main()

    std::string pieces = "12344//1238";

    unsigned pos;
    pos = pieces.find("//");
    std::string first = pieces.substr(0, pos);
    std::string second = pieces.substr(pos + 2);
    std::cout << "first: " << first << " second " << second << std::endl;
    double d1 = convertToInt(first), d2 = convertToInt(second) ;
    std::cout << d1 << " " << d2 << std::endl ;

【讨论】:

【参考方案5】:

我能想到的最简单的方法:

#include <string>
#include <sstream>
#include <iostream>

using namespace std;

void main ()

 int int1, int2;
 char slash1, slash2;

 //HERE IT IS:
 stringstream os ("12344//1238");
 os>> int1 >> slash1 >> slash2 >> int2;
 //You may want to verify that slash1 and slash2 really are /'s

 cout << "I just read in " << int1 << " and " << int2 << ".\n";

 system ("pause");

也很好,因为它很容易重写——比如说,如果你决定读取由其他东西分隔的整数。

【讨论】:

【参考方案6】:

将整数作为字符串。 然后字符串将包含数字和 // 符号。 接下来,您可以运行一个简单的 for 循环来查找字符串中的“/”。 符号之前的值存储在另一个字符串中。 当 '/' 出现时,for 循环将终止。你现在有了第一个的索引 '/' 象征。 增加索引并使用另一个 for 循环复制字符串的其余部分,在另一个 细绳。 现在你有两个单独的字符串。

【讨论】:

以上是关于使用 C++ 拆分字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

拆分字符串C ++ [重复]

C ++中的拆分字符串[重复]

加入列表和拆分字符串 [重复]

在nodejs中按字节拆分对象[重复]

在 C++ 中拆分字符串

拆分C++字符串提升?