に渡す方法char *にchar *を渡すには?この問題は、SIZE constを持つ事前定義のchar []配列で簡単に解決できますが、事前定義されたサイズがないため、ベクトルの柔軟性が必要です。ベクトル<char>をポインタchar *
答えて
は、ここで私が働いているやってしまったものです:
#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;
}
/*
最も明白なのは&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>());
私がのstd ::文字列 – user1066524
エラーC2664を試してみました: 'getnumberofwords':パラメータ1を 'std :: string'から 'char *'に変換できません。 – user1066524
@ user1066524:はい、私はあなたが 'c_str()'を使う必要があると言っていたので、getnumberofwords(your_string.c_str()); ' –
あなたは、関数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++;
}
}
}
ベクトルからポインタへの型変換方法はありません。
これは、値ではなくポインタのアドレスのみを使用しています。 – user1066524
[基になる配列へのポインタ](http://en.cppreference.com/w/cpp/container/vector/data)を取得する方法があります。 –
あなたは、基になる配列へのポインタを取得するためにdata()
メンバーを使用することができます。
getnumberofwords(input.data());
私はこれを試してみます。私は心配していますが、ベクトルなしで簡単にやり遂げようとしたため、あらかじめ定義されたchar配列SIZEを使用していました。残念ながらそれはまったくうまくいきませんでした。だから何らかの理由でプログラムが全く動かない。私たちが指針を得るまで、私はC++で何の問題もありませんでした。今私は夢中になる。私の出力は私に0を与え続けます。forループはまったく何もしていないのと同じです。私は問題がstrlenかどうか疑問に思います。私はデバッグを試みました、そしてそれは文字列をchar *に渡したという点ではうまくいっていましたが、それ以降は動作していないようです。 – user1066524
@ user1066524「私がポインタになるまではC++で何の問題もありませんでした」とは、「私が生まれるまで人生に何の困難もありませんでした」と言っています – Griddo
- 1. のChar * ::ベクトル<char>
- 2. 反復::ベクトル<std :: vector <char>>?
- 3. ベクトル<string>をベクトルに変換する方法<char*>
- 4. ベクトルをソートする方法<char*>?
- 5. STLのベクトル<char>にcharバッファを添付
- 6. 読むデータ::ベクトル<unsigned char型>
- 7. コピーのstd :: charへのベクトル<uint8_t> *
- 8. コンバートのstd :: charへのベクトル<T> *
- 9. フィードのstd ::ベクトル<unsigned char型>
- 10. C++グローバルcharポインタ?
- 11. charポインタがC
- 12. インクリメントのcharポインタ
- 13. ポインタと配列[intポインタとcharポインタ]
- 14. Cのcharポインタにcharポインタのアドレスを格納
- 15. ポインタのベクトル構造体に対するオーバーロード演算子<<?
- 16. 型キャストcharポインタを整数ポインタ
- 17. ポインタのベクトルへのポインタ
- 18. C char配列ポインタ
- 19. charポインタ内のセグメンテーションフォルト
- 20. 符号なしのcharポインタとcharポインタの違い
- 21. null以外の終了ベクトルを<char>に変換する
- 22. C++、ベクトル<char>をofstreamスキップの空白に書き込む
- 23. ファイルをベクトルにロードする<unsigned char>
- 24. ベクトル<unsigned char>をバイト[]に変換できますか?
- 25. ソケットにベクトルを送る方法<unsigned char>
- 26. Visual C++ベクトル<char>はリストボックスに数値を入れます
- 27. swig char ** charへのポインタとして*
- 28. charポインタとchar配列のstrcpyオーバーフローC
- 29. ベクトルのベクトルをポインタのポインタに変換する
- 30. char型のポインタと整数ポインタ
-1:フォーマットが正しくなく、元の質問。 – Griddo