-3

私はC++を学び始めたばかりです。また、これは宿題の質問ではなく、私が立ち往生しているだけであることを明確にしたいと思います.

私は MIT の Web サイトで課題の質問をしていましたが、ここに質問を貼り付けました。

最後の NULL 文字を除いた文字列の長さ (char *) を返す関数を作成します。標準ライブラリ関数を使用しないでください。算術演算子と逆参照演算子を使用できますが、インデックス演算子 ([]) は使用できません。

配列なしでこれを行う方法がわかりません。

どんな助けでも大歓迎です!!

これは私がしたことです:

#include<iostream>
#include<conio.h>
#include<string>


using namespace std;

int stringlength (char* numptr);

int main()
{
    char *mystring;


    cout<<"enter the string \n";
    cin>>mystring;

    cout<<"length is "<<stringlength(mystring);

    getch();
}

int stringlength (char* numptr)
{

    int count=0;

    for(;*numptr<'\0';*numptr++)
    {
                   count++;
    }
    return(count);
 }



This is what i had done previously before I asked u all about the problem.
But this got me an answer of zero.

But if in my function i change *numptr<'\0' to *numptr!= 0, i get the right answer.

Now what i am confused about is, isn't that the null character, so why cant i check for      that.
4

3 に答える 3

4

あなたはこれを教育的なこととして行っているので、私はあなたに答えを与えるつもりはありません. でも、途中で少しお手伝いします。

achar*と演算子を使用して、文字列の最後の文字になる++ゼロの終了を確認します。\0

于 2013-05-02T16:39:29.427 に答える
1

まず第一に、これは 2013 年に C++ を学ぶ方法ではありません。答えは、低レベルのポインター操作に依存しています。この点に到達する前に、C++ について学ぶべき重要なことは他にもたくさんあります。現時点では、これらの低レベルの詳細についてではなく、文字列、ベクトル、関数、クラスについて学習する必要があります。

質問に答えるには、文字列がどのように表現されるかを知る必要があります。それらは文字の配列として表されます。C および C++ では、配列に組み込みの長さはありません。したがって、長さを見つけるには、それを保存するか、他の手段を使用する必要があります。文字列が作成する方法は、長さを見つけることができるようにするため、配列の最後の位置として 0 を格納することです。したがって、「Hello」は次のように保存されます

{'H','e','l','l','o',0}

長さを見つけるには、インデックス 0 から始まる配列を調べ、文字値 0 に遭遇したときに停止します。

コードは次のようになります

int length(const char* str){
    int i = 0;
    for(; str[i] != 0; i++);
    return i;
} 

C および C++ では、str[i] は *(str + i); と同じです。したがって、質問を満たすために、次のように書くことができます

int length(const char* str){
    int i = 0;
    for(; *(str + i) != 0; i++);
    return i;
} 

+ i を使用する代わりに、str を直接インクリメントできます。

int length(const char* str){
    int i = 0;
    for(; *str++ != 0; i++){;
    return i;
} 

C では、値が 0 の場合は false、それ以外の場合は true であるため、!= 0 は必要ないため、次のように記述できます。

int length(const char* str){
    int i = 0;
    for(; *str++; i++){;
    return i;
} 
于 2013-05-02T16:53:45.207 に答える
0
#include<iostream>
#include<conio.h>
#include<string>


using namespace std;

int stringlength (char* numptr);

int main()
{
    char *mystring;


    cout<<"enter the string \n";
    cin>>mystring;

    cout<<"length is "<<stringlength(mystring);

    getch();
}

int stringlength (char* numptr)
{

    int count=0;

    for(;*numptr<0;*numptr++)
    {
               count++;
    }
    return(count);
 }
于 2013-05-07T17:35:31.143 に答える