Как Разделить Строку На Слова И Присвоить Значение

Тема в разделе "Общие вопросы по С и С++", создана пользователем SimpleGirl, 21 окт 2014.

  1. SimpleGirl

    SimpleGirl New Member

    Регистрация:
    8 фев 2014
    Сообщения:
    4
    Симпатии:
    0
    Подскажите пожалуйста

    Хотела поделить строку на слова и присвоить разделенные значения но не получается


    почему так не работает?
    Код ( (Unknown Language)):
     
    char str[] = "самолет = летательный аппарат";
    char *sp;

    sp = strtok(str, "=");

    chaineCar1 = sp[0];
    chaineCar2 = sp[1];
    и вот так тоже пыталась

    Код ( (Unknown Language)):
    char str[] = "самолет = летательный аппарат";
    char *sp;
    int i, j;

    for(i = 0, j=0; str[i]!='\0'; i++, j++){
    if((str[i] != '=')&& (flag == 0)){
    chaineCar1[j] += buf[i];
    }
    else {flag == 1;
    chaineCar2[j] += buf[i+1];}}
     
  2. Valimor

    Valimor Well-Known Member

    Регистрация:
    10 апр 2010
    Сообщения:
    45
    Симпатии:
    0
    strok не делит строку str на двое, а только возвращает символы расположенные до делителя(delimeter - у тебя это " =").
    Далее вот эта строка:
    Код (C++):
    sp = strtok(str, "=");
    еще не возвращает никакого значения, а только инициализирует конструктор. Правильная запись такая:
    Код (C++):
    char stringstr[]="пять плюс пять = двенадцать. Вот такая математика))"
    char* pstring=new strtok(stringstr,"=");
    chaineCar1=strtok(NULL," "); // а вот здесь уже нам начинают отлетать символы "пять плюс пять "
    chaineCar2=strtok(NULL," "); // а здесь "двенадцать. Вот такая математика))"
    а вообще если стоит задача получить из строки цифры , то советовал бы делать в цикле:
    Код (C++):
    char stringstr[]="55 32 96.21 4.1 86.01 53 23.32";
    float cifirka[7];
    int i=0;
    char* pstring=new strtok(stringstr," ");//здесь делитель пробел
    while(pstring!=0)
    {
    cifirka[i]=strtok(NULL," ");
    i++;
    }
     
  3. Valimor

    Valimor Well-Known Member

    Регистрация:
    10 апр 2010
    Сообщения:
    45
    Симпатии:
    0
    Код (C++):
    char str[] = "самолет = летательный аппарат";
    char *sp;
    int i, j;

    for(i = 0, j=0; str[i]!='\0'; i++, j++){
    if((str[i] != '=')&& (flag == 0)){
    chaineCar1[j] += buf[i];
    }
    else {flag == 1;
    chaineCar2[j] += buf[i+1];}}
    что за переменная flag ? судя по всему когда у тебя цикл пойдет на первый заход и перейдет по ветви else, то переменная flag установится в единицу и больше никогда не сбросится (по крайней мере я нигде не вижу выражения flag=0;). И вообще ветвь else какая-то странная и построена неправильно. buf[] - вообще не объявлен, а *sp не используется.
    Попробуй так:
    Код (C++):
    char str[] = "самолет = летательный аппарат";
    char chaineCar1[];
    char chaineCar2[];
    int i=0,j=0;
    bool flag=0;// теперь понял зачем тебе переменная flag))
    while(str[i]!="\0")
    {
    if(str[i]=="=")
    j=1;
    if(j=0)
    chaineCar1[i]=str[i];
    else
    {
    chaineCar2[j]=str[i];
    j++;
    }
    i++;
    }
    как-то так
     
  4. SimpleGirl

    SimpleGirl New Member

    Регистрация:
    8 фев 2014
    Сообщения:
    4
    Симпатии:
    0
    Спасибо Вам большое :)
     
  5. Pingvin1

    Pingvin1 Well-Known Member

    Регистрация:
    20 июл 2009
    Сообщения:
    50
    Симпатии:
    0
    Функция strtok модифицирует входную строку, вставляя вместо указанного разделителя \0, а при каждом вызове возражает указатель на следующую часть строки заканчивающую \0 (в данном случае слово), программа может выглядеть так:

    Код (C++):
    #include <stdio.h>//vsprintf,sprintf, printf, fprintf и sscanf, файловый ввод-вывод, fopen макрос NULL, не нужен при использовании gets() и puts()
    #include <string.h>//strtok strcat strcmp
    #include <locale.h> //Для вывода русских букв в консоли Dev 5 C++, достаточно в тело программы (можно в main) записать следующее:setlocale(0, "");
    using namespace std;// cin cout \n \n

    int main(int NumberofArgs, char* pszArgs[]) {
    char str[] = "самолет = летательный аппарат",*pszWord;
    int iKolWord=0;

    setlocale(0, "");
    pszWord =strtok(str," ");
    do {
    iKolWord++;
    printf(" %s", pszWord);
    pszWord = strtok(NULL," ");
    } while(pszWord);
    return 0;
    }
    если = не должно в итоге присутствовать, то вставить if ...
     
Загрузка...

Поделиться этой страницей