とにかく、文字列を入力すると、その文字列内の各文字のASCII値をスキャンしたいのですが、「john」と入力すると、CまたはC++で各文字のASCII値を取得する4つの変数を取得する必要があります
5 に答える
Cで文字列を指定すると:
char s[] = "john";
またはC++の場合:
std::string s = "john";
s[0]
最初の文字の数値を示しs[1]
、2番目の文字の数値を示します。
コンピューターが文字のASCII表現を使用している場合(非常に珍しい場合を除いて、使用しています)、これらの値はASCIIコードです。これらの値を数値で表示できます。
printf("%d", s[0]); // in C
std::cout << static_cast<int>(s[0]); // in C++
整数型(char
)であるため、必要に応じて、これらの値を変数に割り当てて、それらに対して算術演算を実行することもできます。
「スキャン」の意味がよくわかりません。文字列を反復処理して各文字を順番に処理する方法を尋ねている場合、Cでは次のようになります。
for (char const * p = s; *p; ++p) {
// Do something with the character value *p
}
および(最新の)C ++では:
for (char c : s) {
// Do something with the character value c
}
文字列を端末からの入力行として読み取る方法を尋ねている場合は、Cでは次のようになります。
char s[SOME_SIZE_YOU_HOPE_IS_LARGE_ENOUGH];
fgets(s, sizeof s, stdin);
そしてC++ではそれは
std::string s;
std::cin >> s; // if you want a single word
std::getline(std::cin, s); // if you want a whole line
「スキャン」とは別の意味である場合は、明確にしてください。
文字をint型にキャストすることで、文字のASCII値を簡単に取得できます。
char c = 'b';
int i = c; //i contains ascii value of char 'b'
したがって、この例では、文字列のASCII値を取得するコードは次のようになります。
#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::endl;
int main()
{
string text = "John";
for (int i = 0; i < text.size(); i++)
{
cout << (int)text[i] << endl; //prints corresponding ascii values (one per line)
}
}
ASCIIテーブルのエントリを表す整数から対応するcharを取得するには、intをcharに再度キャストする必要があります。
char c = (char)74 // c contains 'J'
上記のコードはC++で書かれていますが、基本的にはC(および他の多くの言語も同様)でも同じように機能します。
長さ'x'の文字列をx変数に変換する方法はありません。CまたはC++では、固定数の変数のみを宣言できます。しかし、おそらくあなたはあなたが言っていることをする必要はありません。おそらく、配列が必要なだけかもしれませんし、解決しようとしている問題を解決するためのより良い方法が必要なだけかもしれません。そもそも問題が何であるかを説明すれば、もっと良い方法を説明できると思います。
ええ、もっと良い解決策もいくつかあると思いますが、これも役に立ちます。 Cで
#include <stdio.h>
#include <string.h>
#include <malloc.h>
int main(){
char s[]="abc";
int cnt=0;
while(1){
if(s[cnt++]==NULL)break;
}
int *a=(int *)malloc(sizeof(int)*cnt);
for(int i=0;i<cnt;i++)a[i]=s[i];
for(int i=0;i<cnt-1;i++)printf("%d\n",a[i]);
return 0;
}
C++では
#include <iostream>
#include <string>
using namespace std;
int main(){
string s="abc";
//int *a=new int[s.length()];
//for(int i=0;i<s.length();i++)a[i]=s[i];
for(int i=0;i<s.length();i++)
cout<<(int)s[i]<<endl;
return 0;
}
これがお役に立てば幸いです。
ええ、それはとても簡単です..ただのデモ
int main()
{
char *s="hello";
while(*s!='\0')
{
printf("%c --> %d\n",*s,*s);
s++;
}
return 0;
}
ただし、マシンがASCII値形式をサポートしていることを確認してください。Cでは、すべての文字にASCIIと呼ばれる1つの整数値が関連付けられています。フォーマット指定子を使用%d
すると、上記のように任意の文字のASCIIを直接出力できます。
注:良い本を手に入れて、この種のプログラムを自分で練習することをお勧めします。