Преобразование символа в int, который находится в строке внутри argv[1]

Я пытаюсь преобразовать символ в строку, которая хранится в argv[1], и переменную int с именем k, которая будет иметь соответствующее значение ASCII.

Кроме того, этот символ, который я создаю, также будет постоянно изменяться с помощью цикла for, управляемого другой переменной int с именем c. Я отправляю код ниже.

Дайте мне знать, что я делаю неправильно, потому что я продолжаю получать много разных сообщений об ошибках.

#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, string argv[])
{
int a = argc;
if (a != 2)
{
    return 1;
}

string b = argv[1];
//b IS THE CODE WORD
string ptext;
//ptext IS THE MESSAGE TO BE ENCRYPTED

if (isalpha(b))
{
    ptext = GetString();
}
else
return 1;

//this is to index the letters within the code word       
for (int c = 0, d = strlen(b); c < d; c++)      
{ 
int k = (b(char[c]));     
    //this is to index the letters within the plaintext         
    for (int i = 0, l = strlen(ptext); i < l ;i++)
    {
        while (isalpha(ptext[i]))
        {
        printf("%c", b[c]%d+k);
        }              
    }    
  }           
}

Рассматриваемая часть находится на 11 строчке снизу.


person TeachMe    schedule 24.07.2015    source источник
comment
Какие сообщения об ошибках?   -  person Oliver Charlesworth    schedule 24.07.2015
comment
Кроме того, что такое string?   -  person Oliver Charlesworth    schedule 24.07.2015
comment
Строка представляет собой массив символов. GetString — это функция из библиотеки ‹cs50.h›, извините, что не включила ее в код. Сообщения об ошибках, которые я получаю, различаются. Для кода в том виде, в каком он есть сейчас, сообщение об ошибке является ожидаемым выражением с небольшим указателем, указывающим на c символа   -  person TeachMe    schedule 24.07.2015
comment
@OliverCharlesworth, по-видимому, эта штука cs50 включает typedef char *string; . Не смущает, совсем нет...   -  person M.M    schedule 24.07.2015
comment
int k = (b(char[c])); должно читаться как int k = b[c] - '0';, но b[c]%d+k позже будет неправильным, вам нужно будет переосмыслить это. Кроме того, isalpha(b) является незаконным, вы должны были получить сообщения компилятора об этом.   -  person M.M    schedule 24.07.2015
comment
@MattMcNabb извините, что такое typedef char *string; ?   -  person TeachMe    schedule 24.07.2015
comment
Что означает -0 в int k = b[c] - 0; иметь в виду? Я не знаком ни с чем подобным.   -  person TeachMe    schedule 24.07.2015
comment
@EthanT см. здесь. Если я понимаю, что вы пытаетесь сделать; вы хотите изменить значение символа, а не выполнять преобразование типа. char — целочисленный тип в C.   -  person M.M    schedule 24.07.2015
comment
Я прочитал связанный форум, но я все еще не уверен, почему компилятор понимает, что вы сделали. Есть ли причина, почему то, что я сделал, было неправильным? Кроме того, просто чтобы уточнить, все, что я пытаюсь сделать, это взять символ, который имеет позицию x в массиве argv[1], и сохранить его соответствующее значение ASCII в переменной int, которую я объявил как k.   -  person TeachMe    schedule 24.07.2015
comment
@ethan, какой язык ты хочешь здесь использовать C или C++?   -  person Pawan    schedule 24.07.2015
comment
Если вы уверены, что char всегда находится в диапазоне от char ASCII '0' до ASCII '9', вы можете использовать арифметику для решения проблемы, как показывает вам @MattMcNabb. Другими словами, int k = b[c] - '0'; равно b[c] - 0x30. Номера ASCII начинаются с 0x30 до 0x39. Очевидно, что этот тип преобразования работает только с одной цифрой.   -  person LPs    schedule 24.07.2015
comment
да, ваш код был неверным: b(char[c]) — синтаксическая ошибка. Оператор [ ] должен иметь в качестве операндов два объекта, а не имя типа. Кроме b[c], нет никакой другой разумной комбинации b и c.   -  person M.M    schedule 24.07.2015
comment
Строка — это массив символов. В контексте кода, который вы показываете, string, скорее всего, является не массивом char, а указателем на char, то есть char *.   -  person alk    schedule 24.07.2015


Ответы (1)


Я попытался изменить ваш код в соответствии с моей системой Linux и опубликовать здесь с небольшими изменениями здесь и там в коде на основе предоставленных вами данных (или, скорее, не предоставленных).

Надеюсь, это поможет вам понять, что не так в вашем коде.

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

#define string char*
int main(int argc, string argv[])
{
int a = argc;
if (a != 2)
{
    return 1;
}

string b = argv[1];
//b IS THE CODE WORD
string ptext;
//ptext IS THE MESSAGE TO BE ENCRYPTED

if (isalpha(b))
{
    //ptext = GetString();
    ptext = "Hello World";
}
else
return 1;

//this is to index the letters within the code word
int c = 0;
int d;
for (c = 0, d = strlen(b); c < d; c++)
{
//int k = (b(char[c]));
int k = *(b+c);
    //this is to index the letters within the plaintext
    int i = 0;
    int l;
    for (i = 0, l = strlen(ptext); i < l ;i++)
    {
        //This will cause buffer overflow, so commenting
        /*
        while (isalpha(ptext[i]))
        {
        printf("%c", b[c]%d+k);  //what are you trying to print as %d here
        }
        */
    }
}
}
person Pawan    schedule 24.07.2015
comment
#define string char* Пожалуйста, нет... для этого и нужен typedef. - person jcai; 24.07.2015