2

无论如何,如果我输入任何字符串,那么我想扫描该字符串中每个字符的 ASCII 值,如果我输入“john”,那么我应该得到 4 个变量来获取每个字符的 ASCII 值,用 C 或 C++

4

5 回答 5

10

给定 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

如果您通过“扫描”表示其他意思,请澄清。

于 2012-11-16T07:35:12.703 回答
3

您可以通过将其转换为 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 中的工作方式基本相同(我猜还有许多其他语言)

于 2012-11-16T07:45:22.347 回答
2

没有办法将长度为 'x' 的字符串转换为 x 变量。在 C 或 C++ 中,您只能声明固定数量的变量。但可能你不需要做你所说的。也许您只需要一个数组,或者很可能您只需要一种更好的方法来解决您要解决的任何问题。如果您首先解释问题所在,那么我确信可以解释一个更好的方法。

于 2012-11-16T07:38:21.593 回答
1

是的,我认为还有一些更好的解决方案可用,但这一个也有帮助。 在 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;
}

我希望这个会有所帮助..

于 2018-02-03T07:51:56.370 回答
0

是的,这很容易..只是一个演示

int main()
{
 char *s="hello";
 while(*s!='\0')
  {
  printf("%c --> %d\n",*s,*s);
  s++;
  }
 return 0;
}

但请确保您的机器支持 ASCII 值格式。在 C 中,每个字符都有一个与之相关的整数值,称为 ASCII。使用%d格式说明符,您可以直接打印上述任何字符的 ASCII。

注意:最好自己买好书并练习这种程序。

于 2012-11-16T07:33:36.380 回答