Как получить строку из массива символов в C? - PullRequest
0 голосов
/ 28 января 2012

РЕДАКТИРОВАТЬ: Теперь я понимаю, как строки и память работают в C, этот вопрос был из-за плохого понимания

У меня есть буфер символов размером 64 элемента.Данные вставляются в него другой функцией.Я хочу получить все элементы массива, которые не равны нулю.

Чтобы объяснить это лучше, вот пример (псевдокод)

char[5] data;
data[0] = 'c';
data[1] = 'a';
data[2] = 't';
data[3]; // = null 
getString(data); // Should return "cat" 

Ответы [ 3 ]

3 голосов
/ 28 января 2012

Строки в C представлены массивами символов.Эти строки заканчиваются нулевым (завершающим) символом.Поэтому, если вы вручную строите массив символов, нет способа, как «получить строку из массива символов», потому что она уже является строкой.они находят завершающий символ, что является причиной того, что в моем примере «x» не будет выводиться.

1 голос
/ 28 января 2012

A char[] с нулевым элементом в нем можно использовать везде, где ожидается строка с нулевым символом char*, поэтому просто используйте ее как есть.

0 голосов
/ 03 февраля 2012

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

но вот что вы можете сделать, если хотите попробовать:

#include<iostream>
#include<string>
using namespace std;

void main()
{
    int n,pos=0;
    char ch;    
    cout<<"\nEnter number of characters: ";
    cin>>n;
    char *ptr= new char[n];
    while(pos<n)
    {
    cout<<"\nEnter character: ";
    cin>>ch;
    cout<<"\nEnter position: ";
    cin>>pos;
    ptr[pos]=ch;
    }
    cout<<"\nNumber of Valid characters: ";
    int count=0;
    for(int i=0;i<n;i++)
    {
        if(isalnum(ptr[i])||ispunct(ptr[i]))
        {
            //add other single char function required from http://www.cplusplus.com/reference/clibrary/cctype/ according to your use
            count++;
        }
    }
    cout<<count<<endl;
}

для функции одиночного символа, необходимой для проверки, обратитесь к странице: http://www.cplusplus.com/reference/clibrary/cctype/

...