Я читаю файл, и я хотел бы извлечь все его содержимое и сохранить их в один символ в C++. Я знаю, что это можно сделать с помощью строк, но я не могу использовать строки и вам нужно прибегнуть к char. Я могу объединить несколько символов в одну переменную char?
Вот что я пробовал до сих пор:
string str = "";
ifstream file("c:/path.....");
while (file.good())
{
str += file.get();
}
const char* content = str.c_str();
printf("%c", *content);
но это только что дало мне первую букву файла и это.
Если и попытался:
ifstream file("c:/path.....");
char c = ' ';
char result[100];
while (file.good())
{
c= file.get();
strcat(result,c);
}
но это все время давало мне ошибки времени выполнения.
Для второй попытки, которую вы задали в своем вопросе (который, как я полагаю, из ваших других советов, это то, что вы, наконец, хотите), вы можете попробовать следующее как быстрое решение:
ifstream file("c:/path.....");
char c[2] = { 0, 0 };
char result[100] = { 0 };
for (int i = 0; file && (i < 99); ++i)
{
c[0] = file.get();
strcat(result,c);
}
Поскольку использование strcat()
может быть не очень эффективным для этого strcat()
использования, я думаю, что более эффективная реализация будет напрямую записываться в буфер result
:
ifstream file("c:/path.....");
char result[100] = { 0 };
for (int i = 0; file && (i < 99); ++i)
{
result[i] = file.get();
}
Может быть, что-то вроде этого:
char result[100];
int i = 0;
while (file.good())
{
c= file.get();
if(i<100)
result[i++]=c;
}
result[i]='\0';
В этом решении много чего улучшить (что бы вы сделали, если в вашем файле было больше 99 символов, file.good() не лучший вариант для состояния цикла и т.д.). Также гораздо лучше использовать строки. Я не знаю точно, почему вы не можете их использовать, но на всякий случай, когда вы передумаете, вы можете прочитать свой файл следующим образом:
std::string line;
while ( getline(stream, line)) {
process(line);
}
В первом кодовом блоке:
const char* content = str.c_str();
printf("%c", *content);
печатает только первый символ строки, потому что *contents
разделяет указатель на (первый символ) строки, а %c
- формат printf для одного символа. Вы должны заменить это на
printf("%s", content);
для печати всей строки. Или просто используйте
std::cout << str;
char
содержит один символ. Вы имеете в виду массив char
?
Вы можете создать std::string
своих персонажей и объединить их:
char c1 = 'a';
char c2 = 'b';
std::string concatted = std::string(1, c1) + std::string(1, c2);
Это работает из-за заполнения std::string
constructor, см. Ссылку.
c1
и c2
не являются строками.
Очевидно, вы новичок в c++ или, по крайней мере, используете какую-то странную терминологию.
Прежде всего, я советую вам прочитать литературу c++ для новичков (вы можете найти ее список в stackoverflow). Тогда вы поймете все концепции струн в c++.
Во-вторых, используйте этот код для чтения содержимого файла и сохранения его в символе char *.
FILE *f = fopen("path to file", "r");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);
char *content = new char[fsize + 1];
fread(content, fsize, 1, f);
fclose(f);
content[fsize] = 0;
cout << "{" << content <<"}";
delete content;
char
, а не массивы char[]
!