无论如何,如果我输入任何字符串,那么我想扫描该字符串中每个字符的 ASCII 值,如果我输入“john”,那么我应该得到 4 个变量来获取每个字符的 ASCII 值,用 C 或 C++
5 回答
给定 C 中的字符串:
char s[] = "john";
或在 C++ 中:
std::string s = "john";
s[0]
给出第一个字符的数值,s[1]
第二个以此类推.
如果您的计算机使用字符的 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 类型来简单地获取 char 的 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。使用%d
格式说明符,您可以直接打印上述任何字符的 ASCII。
注意:最好自己买好书并练习这种程序。