0

我正在将 a 转换stringchar数组,而不是转换回 astringvector. 当我尝试打印时,我得到了这个:

this
is
the
sentence iuִִ[nu@h?(h????X

以及更多。这是代码:

int main(int argc, char *argv[]){
    string s ="this is the sentence";
    char seq[sizeof(s)];
    strcpy(seq, "this is the sentence");
    vector<string> vec = split(seq);
    printWords(vec);

    return 0;
}

这是 func.cpp 文件。一个函数将字符拆分为字符串向量,另一个是打印:

vector<string> split(char sentence[]){
    vector<string> vecto;
    int i=0;
    int size= strlen(sentence);
    while((unsigned)i< size){
        string s;
        char c =' ';
        while(sentence[i]!=c){
            s=s+sentence[i];
            i+=1;
        }
        vecto.push_back(s);

        i+=1;
    }

    return vecto;
}

void printWords(vector<string> words){
    int i=0;
    while ((unsigned)i<words.size()){
        string s = words.at(i);
        cout << words.at(i) << endl;
        i+=1;
    }
}
4

2 回答 2

1

您的问题之一是sizeof(s) != s.size().

试试这个:

char letters = new char[s.size() + 1]; // +1 for the null terminator.

该表达式sizeof(s)返回std::string对象的大小,而不是字符串中的字符数量。std::string对象可能多于字符串内容 。

此外,尝试使用std::string::operator[]访问字符串中的单个字符。

例子:

string s = "this is it";
char c = s[5]; // returns 'i' from "is".

您还应该考虑使用 的搜索功能std::string,例如std::string::find_first_of

例子:

无符号整数位置 = s.find_first_of(' ');

另一个有用的功能是substr方法:

   std::string word = s.substr(0, position);
于 2012-11-02T19:31:21.183 回答
1

在理解了上面的答案之后,尝试一种不易出错的风格,更像这样(C++11):

#include <iostream>
#include <sstream>
#include <vector>

using namespace std;
int main(){
  string s{"this is the sentence"};
  stringstream sStream;
  sStream<<s;
  string word;
  vector<string> vec;
  while(sStream >> word){
    vec.emplace_back(word);
  }
  for(auto &w : vec){
    cout << "a word: " << w <<endl;
  }
}
于 2012-11-02T19:39:43.997 回答