Вычисление количества символов в строке в массиве символов - PullRequest
1 голос
/ 21 февраля 2012

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

char * strings [] ={

// String 1 of 5000:  Length = 185
"J1{GW3_%-3s_%p*E<ed<qLB#YHN%S8.odr5|[QPz&Hslk#3vi[)T3wgh3lHdVtTGz|M1RsGy_r=J]Rgp`0+s)pbvpm<u'8NsPX:Uk)kU,d5t@w[{2efjt*z_`eOqa#iP3z)T<(eYWb%W{5g?ynp*<jfEeLUA5:ukgvw$Le,Yjv*o{a/,tV#dG1|+D", 

// String 2 of 5000:  Length = 9
"^PuU]gjh)", 

}

Сейчас я использую функцию rand для вывода 5000 строк в выходной файл, например

outfile1 << strings[rand()%5000] << endl;

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

Во всяком случае, я действительно теряюсь, когда дело доходит до отображения длины каждой строки в выходном файле. У кого-нибудь есть предложения относительно того, как я могу это сделать? Это домашнее задание, поэтому я хотел бы получить некоторую информацию о том, как это применить, а не прямой ответ. :)

На данный момент мой вывод такой:

#11 (Length:168) - JZn'TGF&#K=EohoZT
#12 (Length:189) - DiF9ao^T,7rtQ#Yc>n{_YIG_y
#13 (Length:50) - y,|l2;hA;H;pHz?|jLADh

Как видите, строки выводятся правильно, но длина неверна.

Ответы [ 4 ]

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

/// Обновленный ответ //

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

char* strings[] = {"hellothisistom", "nicetomeetyou"};

for (int i = 0; i<2; i++)
{
    int k = rand()%2;
    cout<< strings[k] << endl;
    cout<< strlen(strings[k])<<endl;

}

Вы можете заменить cout строкой выходного файла. Убедитесь, что вы используете один и тот же k, чтобы получить как строку, так и длину!

/////////////////////////////////////////////// /

A символ - это однобитный символ, такой как «A», «b», «%» и т. Д. строка символов - это просто массив символов. С другой стороны, string - это специальный класс, представляющий серию символов.

Символьная строка , работает как обычный массив. В вашем случае, strings (который является массивом символов), вы можете просто использовать sizeof(strings)/sizeof(strings[0]), чтобы узнать количество символов.

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

Например, если ваша строка символов hellothisistom. Невозможно отделить слова ... если вы не пойдете на обработку естественного языка. Если ваша строка символов похожа на hello/this/is/tom, что разделяет отдельные слова, вы можете использовать различные методы для извлечения слов. Вы можете проверить сайт ниже для инструментов, которые вы можете использовать. http://www.cplusplus.com/reference/clibrary/cstring/

Например, в цикле вы можете искать первое вхождение этого специального символа и искать тот, что после него. Затем вы просто копируете символы между ними, выводите эти символы и и размер (используя метод, упомянутый выше). Затем перейдите к следующему.

Когда вы выводите stings[rand()%5000], не будет ли внутри strings?

просто набор случайных символов
0 голосов
/ 21 февраля 2012

str.size (), где str - ваша строковая переменная, будет выводить длину строки

0 голосов
/ 21 февраля 2012
  1. srand (время (0));

Стандартный способ генерации приличных псевдослучайных чисел.'srand' определяет начальное число на основе числа, переданного в функции, в то время как 'time (0)' будет возвращать разное число каждую секунду, поэтому это должно решить вашу проблему с "тем же шаблоном".

  1. a) Вы можете использовать strlen

    b) Или вы можете просто написать функцию, которая будет проходить через строку, проверяя каждый символ на 0 (0 - конец строки), а затемвозврат текущего значения итерации.

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

Какую проблему вы в конечном итоге решите, пытаетесь ли вы проанализировать данные?

Я не понимаю, что это «находит строки в массиве символов и выдает строки случайным образом»;Вы должны знать, что массив символов может быть воспринят как гигантская строка, поэтому вы ищете специальные разделители и хотите вернуть список всех допустимых совпадений?

Если да, то как определить разницу?между допустимой строкой и случайным материалом в источнике;должен ли он быть разделен?

Как вы можете выводить строки случайным образом?

Пожалуйста, добавьте более подробную информацию о том, что вы пытаетесь решить, и о данных, над которыми вы работаете.

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