如何切割字符串C++
How to Cut String C++
您好,我想在这种情况下切断字符串:
if (std::count(text.begin(), text.end(), ',') > 3 {
//Cut String after 3 ','
}
文本如下所示:
"项目 1、项目 2、项目 3、项目4、项目5">
我想要这个:
"项目1,项目2,项目3,项目4[在右侧>>上剪切所有内容],项目5" 并返回 "项目 1、项目 2、项目3、项目4">
寻找第一个答案,我正在寻找这样的东西(但有效(:
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
string s1 = "item1, item2, item3, item4, item5";
if(std::count(s1.begin(), s1.end(), ',') > 3) {
int comma = 0;
int x = sizeof(s1);
for(int i = 0; i < x; i++) {
if (comma == 3) {
string sub = s1.substr(0, i);
cout << "String is: " << sub;
}
if(s1[i] == ',') {
comma++;
}
}
}
return 0;
}
看看 std::string::substr
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
// Take any string
string s1 = "item1, item2, item3, item4, item5";
// Start at position 0 to position of character ',' in "item4,"
string sub = s1.substr(0, 26);
// prints item1, item2, item3, item4
cout << "String is: " << sub;
return 0;
}
您需要更改如下代码。
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
string s1 = "item1, item2, item3, item4, item5";
int comma = 0;
int x = s1.length();
bool flag = false;
for(int i = 0; i < x; i++) {
if (comma == 4) {
string sub = s1.substr(0, i-1);
cout << "String is: " << sub;
flag = false;
return 0;
}
if(s1[i] == ',') {
comma++;
}
else{
flag = true;
}
}
if(flag)
cout<<"String not contain more then 3 comma's n String is :: "<<s1;
return 0;
}
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
string s1 = "item1, item2, item3, item4, item5";
if(std::count(s1.begin(), s1.end(), ',') > 3) {
int comma = 0;
int x = s1.length();
for(int i = 0; i < x; i++) {
if (comma == 3) {
string sub = s1.substr(0, i-1);
cout << "String is: " << sub;
return sub;
}
if(s1[i] == ',') {
comma++;
}
}
}
return 0;
}
没有必要使用std::count()
,那只是浪费了开销。您扫描字符串两次,而一次就足够了。
此外,您对sizeof()
的使用是错误的,您需要改用std::string::size()
。sizeof(s1)
告诉您编译时s1
(即std::string
类本身(的字节大小,而s1.size()
告诉您运行时s1
中有多少个字符。
我建议在循环中使用std::string::find()
,例如:
#include <string>
#include <iostream>
std::string cutAtNComma(const std::string &s, int n) {
std::string::size_type idx = 0;
while (n-- > 0) {
idx = s.find(',', idx);
if (idx == std::string::npos) break;
if (n == 0) return s.substr(0, idx);
++idx;
}
return s;
}
int main() {
std::string s1 = "item1, item2, item3, item4, item5";
std::string sub = cutAtNComma(s1, 4);
std::cout << "String is: " << sub;
return 0;
}
现场演示
或者,您可以改用std::find_if()
,例如:
#include <string>
#include <iostream>
#include <algorithm>
std::string cutAtNComma(const std::string &s, int n) {
auto iter = std::find_if(s.cbegin(), s.cend(),
[n](char c) mutable {
if (c == ',') {
if (--n == 0) return true;
}
return false;
}
);
if (iter != s.cend()) return std::string(s.cbegin(), iter);
return s;
}
int main() {
std::string s1 = "item1, item2, item3, item4, item5";
std::string sub = cutAtNComma(s1, 4);
std::cout << "String is: " << sub;
return 0;
}
现场演示