Преобразовать char** в int C

#c #char

#c #символ

Вопрос:

Итак, у меня есть массив символов, в котором есть другой массив символов (если я не ошибаюсь). Что мне нужно сделать, так это изменить третий элемент ( words[2] ). Этот третий элемент определенно будет числом. Я должен увеличить это число на 15 процентов. Следовательно, мне нужно преобразовать words[2] в int ?

Функция:

 void create(char* str) {
    char** words = new char* [strlen(str)];
    int count = 0;
    for (char* part = strtok(str, " "); part != NULL; part = strtok(NULL, " ")) {
        words[count] = _strdup(part);
        count  ;
    }

    cout << "nNew sentence with edited values:" << endl;
    words[2] = words[2]   ((int)words[2] / 100) * 15; //the main problem as I guess
    for (int i = 0; i < count; i  ) {
        printf("%s ", words[i]);
    }
    cout << endl;
    delete[] words;
}
 

Полный код:

 #define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
#include <conio.h> 
#include <string.h>
using namespace std;

void create(char*);

void main() {
    const int maxLength = 100;
    char* str = new char[maxLength];
    cout << "Enter sentence:n";
    cin.getline(str, maxLength);
    create(str);
    delete[] str;
}

void create(char* str) {
    char** words = new char* [strlen(str)];
    int count = 0;
    for (char* part = strtok(str, " "); part != NULL; part = strtok(NULL, " ")) {
        words[count] = _strdup(part);
        count  ;
    }

    cout << "nNew sentence with edited values:" << endl;
    words[2] = words[2]   ((int)words[2] / 100) * 15; 
    for (int i = 0; i < count; i  ) {
        printf("%s ", words[i]);
    }
    cout << endl;
    delete[] words;
}
 

Как это должно выглядеть (3-й элемент увеличен на 15 процентов):
Как это должно выглядеть

Невозможно сделать это с помощью string . На самом деле, это моя домашняя работа из университета, и не использование string является условием

Комментарии:

1. можете ли вы поделиться вводом и ожидаемым результатом и тем, какой результат вы получаете в настоящее время

2. Не связано: вы делаете все, что хотите, слишком сложным. Используйте std::string s и std::vector<std::string> . Для этого нет необходимости использовать new[] and delete[] .

3. word[2] — это не целое число, а символы. (int)word[2] не может быть преобразован в целое число с помощью магии. Вы должны использовать функцию string to integer, такую как atoi в c или stoi в c .

Ответ №1:

вам нужно преобразовать a char* в int , как показано ниже. (int) приведение не будет работать

 int a = atoi(words[2]); // make sure words[2] is null terminated
 

Комментарии:

1.Будучи немного педантичным: этот код не преобразует a char* в an int . Он преобразует текст, который words[2] указывает на , в an int . Четко помните различие между указателем и тем, на что он указывает; это избавит вас от многих головных болей. 1.