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

  • Автор темы SimpleGirl
  • Дата начала
S

SimpleGirl

Подскажите пожалуйста

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


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

sp = strtok(str, "=");

chaineCar1 = sp[0];
chaineCar2 = sp[1];

и вот так тоже пыталась

Код:
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];}}
 
V

Valimor

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++;
}
 
V

Valimor

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++;
}
как-то так
 
P

Pingvin1

Функция 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 ...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!