Member 11735960 Ответов: 3

Как заставить его работать на C++?


#include<stdio.h>
#include<string.h>
#include<conio.h>
void main()
{
	clrscr();
	int a,c;
	char string[10];
	cout<<"\nEnter the numbers:";
	cin>>a;
	for(int i=0;i<a;i++)>
	{
		cin>>string[i];
	}
	for(int j=1;j<a;j++)>
	{
		c=strlen(string[j]);
	}
	cout<<c;
	getch();
}


Что я уже пробовал:

Я пытаюсь получить длину каждой строки. Когда я запускаю программу, я получаю ошибку

"Не удается преобразовать int в const char *" в строке c=strlen...

Может ли кто-нибудь помочь решить эту проблему?

Если я поставлю for (int j=0, k=0;j< a,k< a; j++, k++)>>
{c[k]=strlen(string[j]);
}
сработает ли это?

jeron1

Что именно вы пытаетесь сделать и что должно представлять собой ' char string[10];'?

OriginalGriff

Это массив с десятью значениями типа char, под названием "строки"

jeron1

Я знаю это, но не верю, что ОП знает. Я пытался заставить их описать свой мыслительный процесс, стоящий за этим утверждением, чтобы его можно было исправить.

Philippe Mori

Плохая идея называть переменную строкой, как в C++, это имя предопределенного класса.

Philippe Mori

Поскольку этот код не имеет большого смысла, было бы полезно, если бы вы рассказали нам, что вы пытаетесь сделать.
Вы можете разделить строку, на которой вы получили ошибку, на 2 строки, Если вы не в состоянии понять, в чем проблема. Кстати, проблема была бы более очевидной с полным сообщением об ошибке.
Какие входные данные вы хотите прочитать (символы или строки)?
Какое значение вы хотите вывести? длина последней строки, общая длина всей строки?

Member 11735960

Я хотел бы сначала ввести количество строк, то есть int. Затем введите каждую строку, а затем отобразите длину каждой строки одну за другой. Сначала я сделал это в Turbo C. Я просто изменил printf и scanf, чтобы они соответствовали форуму C++.

Ошибка находится в строке 17 и говорит: "не удается преобразовать int в const char *".

Philippe Mori

Очевидно, так оно и будет Cannot convert char to const char *.

Полный ответ смотрите в моем решении.

3 Ответов

Рейтинг:
1

Patrice T

string это зарезервированное слово и не может быть использовано в качестве имени переменной. Измените имя переменной

для других проблем, которые у вас есть, используйте отладчик, чтобы увидеть, что делает ваш код.
Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]


Рейтинг:
1

Philippe Mori

Очевидно, вам нужен массив строк:

char string[10][10];

Но это небезопасно, так как произойдет сбой, если вы введете более 10 строк или если какая-либо из них длиннее 10 символов, включая нулевой Терминатор.

Таким образом, вы должны добавить проверку того, что число, введенное пользователем, меньше размера массива. Еще лучше было бы использовать std::vector<> вместо.

Тогда для каждой строки вы действительно должны использовать std::string вместо строки в стиле Си. Это решило бы проблему ввода слишком большого количества данных. Кстати, если вы измените код для использования std::string, возможно, вам придется переименовать переменную string к чему-то еще, чтобы избежать двусмысленности (на самом деле, было бы неплохо сделать это так или иначе).

Затем, если вы хотите вывести длину каждой строки, код для вывода этой длины должен быть внутри цикла. Кроме того, второй цикл должен начинаться с 0, чтобы вывести длину первой строки. Вероятно, вы также захотите добавить пробел или новую строку между каждым выведенным числом.

И, наконец, если вы обновите код для использования std::string, вы должны вызвать функцию-член length() чтобы получить длину.

Кроме того, вы действительно должны включать стандартные заголовки, когда это возможно, например
#include <string> // Note the absence of .h suffix</string>

А потом либо добавить using заявление для std пространство имен или квалифицировать все имена вручную.

Я бы рекомендовал вам читать хорошие книги по C++ и избегать смешивания кода в стиле C с кодом C++.

Об ошибках
Прежде всего, вы должны научиться правильно читать сообщение об ошибке, так как проблемное преобразование находится между char (один символ из массива) и const char *(ожидаемый параметр strlen).


Рейтинг:
0

OriginalGriff

Ну...это правильно.
Вы заявляете string как:

char string[10];
Который представляет собой массив из десяти char ценности.
Но затем вы пытаетесь передать один из элементов strlen:
c=strlen(string[j]);
Что является эквивалентом письма:
c=strlen('X');
С strlen ожидает указатель на константу char - то есть указатель на char эффективно-система жалуется, что не может разыграть char к указателю на char.
Я точно не знаю, для чего предназначен этот код , но вы не можете получить длину строки из одного символа!
И, честно говоря, этот код не делает ничего особенно полезного:
for(int j=1;j<a;j++)>
{
    c=strlen(string[j]);
}

всегда будет уходить c содержащее последнее значение, возвращаемое strlen если это сработает.

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


Member 11735960

Well...my цель состоит в том, чтобы ввести все строки и отобразить длину каждой строки в качестве вывода одну за другой. Как это можно сделать?

OriginalGriff

Как я уже сказал: отойди и подумай об этом пару минут.
Если вы хотите хранить несколько строк, в чем они должны храниться?
Если вы хотите вывести несколько значений, где вам нужно сделать вывод?

Это не сложно, на самом деле - это просто кажется, потому что вы пытаетесь поторопиться, вместо того чтобы сначала думать, а потом кодировать. Дайте ему попробовать!

Member 11735960

Я попробую дотянуться до него.