2013-11-10 3 views
5

Dieser Code, den ich geschrieben habe, durchläuft eine Zeichenkette durch Zeichen. Ich möchte eine Zeichenfolge Wort für Wort durchlaufen. Hier ist mein Code.Wie wird eine Zeichenfolge durch Leerzeichen durchlaufen? Woher weiß ich die Indexnummer des Wortes, in dem ich mich gerade befinde?

string a; // already declared 
    // c is string array 
for (i=0;i<b;i++) { 
    if (strcmp (c[i],a[i]) == 0) { 
     // do something 
     } 
    } 
+3

Sie brauchen 'strcmp' nicht, um Zeichen zu vergleichen. Verwenden Sie einfach 'c [i] == a [i]'. – deepmax

+0

Ich möchte Zeichenfolgen nicht Zeichen vergleichen, deshalb möchte ich die ganze Zeichenfolge Wort für Wort durchlaufen. – amian

Antwort

10

können Sie String-Streams verwenden:

string a = "hello my name is joe"; 
stringstream s(a); 
string word; 
// vector<string> c = ... ; 

for (int i = 0; s >> word; i++) 
{ 
    if (word == c[i]) 
    { 
     // do something 
    } 
} 

Wenn Sie die Möglichkeit haben wollen, in Worten vorne und zurück zu gehen, können Sie sie in einem Array gespeichert werden sollen, so dass dieser zweite Code ist hilfreich dafür:

string a = "hello my name is joe"; 
vector<string> c = {"hello","my","name","is","joe"}; 
string word; 
vector<string> words; 

for (stringstream s(a); s >> word;) 
    words.push_back(word); 

for (int i=0; i<words.size(); i++) 
{ 
    if (words[i] == c[i]) 
    { 
     // do something 
    } 
} 
+0

@M M. Wie könnte ich die Indexnummer des Wortes, das ich während der Zeit des Vergleichs bin, bekommen? – amian

+1

behalten Sie eine Zählung und inkrementieren sie jede Schleife Iteration – Teeknow

+0

@frontenderman was, wenn ich zurück zu einer Position in der Zeichenfolge zurück iterieren möchte? – amian

0

prüfen dies:

#include <stdio.h> 
#include <iostream> 

using namespace std; 

void sort(int *,int); 

int word_size(char * in, int length) 
{ 
    int size = 0; 
    if(!strcmp(in,"")) 
     size = 1; 

    for(int i =0 ;i<length;i++) 
    { 
     if(in[i] == ' ') 
      size ++; 
    } 

    return size; 
} 

int get_word_size(char * in,int length, int index) 
{ 
    int word_num = 0; 
    int size = 0; 

    for(int i = 0;i<length;i++) 
    { 
     if(in[i] == ' ') 
      word_num++; 
     else if(word_num == index) 
     { 
      size++; 
     } 
    } 
    return size; 
} 

char * get_word(char * in,int length,int index) 
{ 
    char * result = new char[get_word_size(in,length,index)]; 
    int k = 0; 
    int word_num = 0; 

    for(int i = 0;i<length;i++) 
    { 
     if(in[i] == ' ') 
      word_num++; 
     else if(word_num == index) 
     { 
      result[k] = in[i]; 
      k++; 
     } 
    } 

    return result; 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    char * x = "Hello this is my name"; 


    char * y = "byebye that was your name"; 



    char * outChar = get_word(x,21,3); 
    outChar[get_word_size(x,21,2)] = '\0'; 
    cout << outChar; 

    int a; 
    cin>>a; 
    return 0; 
} 

Nur getestet ...

Verwandte Themen