2012-04-19 18 views
1

に渡す方法char *にchar *を渡すには?この問題は、SIZE constを持つ事前定義のchar []配列で簡単に解決できますが、事前定義されたサイズがないため、ベクトルの柔軟性が必要です。ベクトル<char>をポインタchar *

答えて

-1

は、ここで私が働いているやってしまったものです:

#include <iostream> 
#include <cstring> 
#include <string> 
#include <iomanip> 



using namespace std; 

//prototype 

void getnumberofwords(char*); 
void getavgnumofletters(char*, int); 



int main() { 

    const int SIZE=50; 
    char str[SIZE]; 

    cout<<"Enter a string:"; 
    cin.getline(str, SIZE); 




    getnumberofwords(str); 


    return 0; 

} 


void getnumberofwords(char *str){ 
    int numwords=0; 

    int lengthstring=strlen(str); 







    //step through characters until null 
    for (int index=0; index < lengthstring; index++){ 
     if (str[index] ==' ') { 
       numwords++; 
     }else{ 

      continue; 
     } 


    } 
    numwords+=1; 
    cout<<"There are "<<numwords<<" in that sentence "<<endl; 
    getavgnumofletters(str, numwords); 



} 



void getavgnumofletters(char *str, int numwords) { 
    int numofletters=0; 

    double avgnumofletters; 
    int lengthstring=strlen(str); 


    //step through characters until null 
    for (int index=0; index < lengthstring; index++){ 
     if (str[index] != ' ') { 
       numofletters++; 
     }else{ 
      continue; 
     } 


    } 

     avgnumofletters = (double)numofletters/numwords; 
     cout<<"The average number of letters per word is "<<setprecision(1)<<fixed<<avgnumofletters<<endl; 



} 



/* 
+0

-1:フォーマットが正しくなく、元の質問。 – Griddo

3

最も明白なのは&your_vector[0]です。最初にベクトルの最後にNULを追加してください。

また、あなたがc_strメンバ関数をNULで終了する文字列を取得することができ、その場合にはstd::string代わりのstd::vector<char>を、使用しています。

編集:なぜ、getnmberofwordsは、ちょうどあなたが使用できなくなった古いCコードでない限り、char *を受け入れるように書かれているのだろうかと思います。 「単語」文字列内で開始し、いくつかの単語を数えるの典型的な定義を考えると

はこのような何かを行うことができます。

std::istringstream buffer(your_string); 

size_t num_words = std::distance(std::istream_iterator<std::string>(buffer), 
           std::istream_iterator<std::string>()); 
+0

私がのstd ::文字列 – user1066524

+0

エラーC2664を試してみました: 'getnumberofwords':パラメータ1を 'std :: string'から 'char *'に変換できません。 – user1066524

+0

@ user1066524:はい、私はあなたが 'c_str()'を使う必要があると言っていたので、getnumberofwords(your_string.c_str()); ' –

0

あなたは、関数getnumberofwordsにベクトルの参照を渡す必要があります。

void getnumberofwords(vector<char>& str){ 
int numwords=0; 
int lengthofstring = str.size(); 
    for (int index=0; index < lengthofstring; index++){ 
     if (str[index] == '\0') { 
      numwords++; 
     } 
    } 
} 

ベクトルからポインタへの型変換方法はありません。

+0

これは、値ではなくポインタのアドレスのみを使用しています。 – user1066524

+0

[基になる配列へのポインタ](http://en.cppreference.com/w/cpp/container/vector/data)を取得する方法があります。 –

3

あなたは、基になる配列へのポインタを取得するためにdata()メンバーを使用することができます。

getnumberofwords(input.data()); 
+0

私はこれを試してみます。私は心配していますが、ベクトルなしで簡単にやり遂げようとしたため、あらかじめ定義されたchar配列SIZEを使用していました。残念ながらそれはまったくうまくいきませんでした。だから何らかの理由でプログラムが全く動かない。私たちが指針を得るまで、私はC++で何の問題もありませんでした。今私は夢中になる。私の出力は私に0を与え続けます。forループはまったく何もしていないのと同じです。私は問題がstrlenかどうか疑問に思います。私はデバッグを試みました、そしてそれは文字列をchar *に渡したという点ではうまくいっていましたが、それ以降は動作していないようです。 – user1066524

+0

@ user1066524「私がポインタになるまではC++で何の問題もありませんでした」とは、「私が生まれるまで人生に何の困難もありませんでした」と言っています – Griddo

関連する問題