c++-C++中string的部分字符提取

问题描述

C++中string的部分字符提取

#include
#include
#include
using namespace std;

int main()
{
vector svec;
string s1("dog cat cat fish");
for (unsigned int i = 0; i != s1.size(); ++i)
{
string s3 = "";
while (s1[i] != ' '&&i < s1.size())
{
s3 += s1[i];
++i;
}
svec.push_back(s3);

    while (s1[i] == ' '&&i < s1.size())
    {
        s3.clear();
    }

}
for (vector<string>::iterator i = svec.begin(); i != svec.end(); ++i)
{
    cout << *i << endl;
}
system("pause");
return 0;

}
我想要分别提取出string:s1中的“dog”,“cat”,“cat”,“fish”;把空格去掉,把这些字符放置在vector中。为什么在vs编程时无法通过,没有数据输出??求解释

解决方案

 #include <iostream>
#include <string>
#include <vector>
using namespace std;

void Trim(vector<string>& vec, const string& str, const string& token)
{
    size_t flag = 0;
    size_t start = 0;
    string temp;
    while (string::npos != (flag = str.find(token, start)))
    {
        temp = str.substr(start, flag - start);
        vec.push_back(temp);
        start = flag + 1;
    }
    temp = str.substr(start);
    if (!temp.empty()) { vec.push_back(temp); }
}

int main()
{
    vector<string> svec;
    string s1("dog cat cat fish");
    const string token(" ");
    Trim(svec, s1, token);

    for (vector<string>::const_iterator it = svec.begin(); it != svec.end(); ++it)
    {
        cout << *it << endl;
    }
    return 0;
}

解决方案二:

i < s1.size() 不是多余的吗?

在push前输出看看

s3.clear();什么意思 清空?需要吗?

string s3 = "";最好定义在for外边。

严禁来说你这样定义 s3只是for块的局部变量。

解决方案三:

#include
#include
#include
using namespace std;
int main()
{
vector svec;
string s1("dog cat cat fish");
for (unsigned int i = 0; i <= s1.size(); ++i)
{
string s3 = "";
while (s1[i] != ' '&&i < s1.size())
{
s3 += s1[i];
++i;
}
svec.push_back(s3);

}

vector::iterator it = svec.begin();
for (; it != svec.end(); ++it)
{
cout << (*it).c_str() << endl;
}
//system("pause");
return 0;
}

// i <= s1.size();

解决方案四:

char *strtok(char *str, const char *delim);

时间: 2024-08-26 08:39:58

c++-C++中string的部分字符提取的相关文章

如何提取&amp;amp;quot;多云转中雨 24℃~30℃ 微风&amp;amp;quot;中的一段字符&amp;amp;quot;多云转中雨&amp;amp;quot;

问题描述 如何提取"多云转中雨 24℃~30℃ 微风"中的一段字符"多云转中雨" 如何提取"多云转中雨 24℃~30℃ 微风"中的一段字符"多云转中雨" 解决方案 以空格作为分割 提取 第一个 String s = "多云转中雨 24℃~30℃ 微风"; String[] temp=s.split(" "); System.out.println(temp[0]); 解决方案二: Str

C#中如何搜索一个string中一共出现某个字符的次数?

问题描述 比如要判断一篇文章中出现"red"的次数如何实现? 解决方案 解决方案二:strings;strings1=s.replace("red","");return(s.length-s1.length)/3;解决方案三:用正则也可以~解决方案四:较简单方式//S1待判定字符串:red需要判定出现次数的字符串string[]S2=S1.Slip("red");//i为red出现的次数inti=S2.Count;解决方案五

JavaScript中String.prototype用法

  本文实例讲述了JavaScript中String.prototype用法.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 // 返回字符的长度,一个中文算2个 String.prototype.ChineseLength=function() { return this.replace(/[^x00-xff]/g,"**").len

java中String的一些方法深入解析

以下是对java中String的一些方法进行了详细的分析介绍,需要的朋友可以参考下   1.public String(char[] c,begin,length).从字符数组c的下标begin处开始,将长度为length的字符数组转换为字符串. begin与length可以省略,即将字符数组c转换为字符串.另:字符数组可改为字节数组byte[] b.char[] c=new char[]{'j','y','6','a','4','t','9'}; String s1=new String(c)

求一正则,可以删除字符串中所有 非键盘字符

问题描述 字符串是从其他地方读取过来的,含一些不确定的特殊符号,这些符合在字符串变量中能看到,通过console.writeline输出是正常的看不到了.求可以直接删除字符串中所有非键盘字符.键盘上能直接输入的,字母.数字.符号要保留着.或者能删除所有非打印字符的正则式. 解决方案 本帖最后由 xzyl 于 2016-03-09 09:47:33 编辑解决方案二:Regex.Replace(text,@"[^x00-xff]",string.Empty)将非ASCII码全部替换为空解决

c++-请问C++中,如何获取字符数组的有效长度?(截止到“”)

问题描述 请问C++中,如何获取字符数组的有效长度?(截止到"") 请问,在C++中,如何获取字符数组的有效长度?(截止到"")? 解决方案 for(int i=0;;i++){ if(charArray[i]=='n') break; else sum++;} 解决方案二: 用函数strlen或者自己循环int i = 0;while (str[i++] != '');return i; 解决方案三: 有个函数叫strlen().你查一下函数参考手册就知道了 用m

字符串-java中String究竟是传递的值,还是引用

问题描述 java中String究竟是传递的值,还是引用 很多人说,java中的String虽然是对象,但是具有值类型的特征.他是值传递,传递的值. 我认为这这种说法完全是错误的. String和普通对象毫无区别,和其他对象一样,传递的是引用,而不是值. 一段String的运用代码: String a = "123"; public void change(String a){ a = "234"; } 很多人会说,a的值没有变,是因为String是值传递,问题是,

string-C++用已存在字符串中的n个字符初始化另一个字符串怎样写最简单

问题描述 C++用已存在字符串中的n个字符初始化另一个字符串怎样写最简单 假设字符串 char *p,p中有100个字符,我想用其中前20个初始化一个string,但是不能改变原来的字符串p,该怎么写最简单呢? 自己写来写去总是觉得很绕 解决方案 代码最简单: char * newchar = new char[101];strncpy(newchar p 100);newchar[21] = '';string * s = new string(newchar); 解决方案二: 可以使用str

java-Java中string和stringbuffer有什么区别???

问题描述 Java中string和stringbuffer有什么区别??? Java中string和stringbuffer有什么区别???求各位前辈指点 解决方案 String,StringBuilder,StringBuffer都实现了CharSequence接口. Java中的String是不可变的,即它本身没有提供改变自身的方法,它的看似改变的方法都是返回一个新的字符串,在多个字符串(含变量)做连接操作(即"+")时,它内部会使用StringBuilder.append操作,最