1 Востаннє редагувалося Replace (11.12.2012 00:43:58)

Тема: Вказівники. Робота із рядками.

потрібно ввести стрічку "I have a small string".та замінити слово "small" на "very large".Моя програма замінює не цілком правильно, тобто з'їдається...допоможіть, будь ласка

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char str[80];
char word1[50];
char word2[50];
char *p;
cout << "Vvedit strichky: ";
gets(str);
cout << "vvedit' shykane slovo\n";
gets(word1);
cout << "vvedit' inshe slovo\n";
gets(word2);
int k=strlen(word1);
p = str;
for(int i=0; i<strlen(str)-k;i++)
{
p=strstr(p, word1);
if(p==NULL)break;
for(int j=0;j<k;j++) *(p+j)=*(word2+j);
}

cout<<"Vasha strichka: ";
cout<<str << "\n";
return 0;
}

2

Re: Вказівники. Робота із рядками.

В тебе наскільки я зрозумів просто одне слово на інше і при цьому не враховується, що 1 слово менше за 2. Але код не перевіряв тому можу помилятись.

3

Re: Вказівники. Робота із рядками.

тобто, маєте на увазі. проблема у розмірностях самої стрічки?
вибачте, я просто не цілком зрозуміла

4

Re: Вказівники. Робота із рядками.

Так цикл в якому ви замінюєте слова повинен виконувватися стільки скільки і друге слово, тобто:
int k=strlen(word2);

Подякували: olena_sherstnyakova1

5

Re: Вказівники. Робота із рядками.

Вам за умоювою можна використовувати клас std::string, просто у вас програма ніби на с++, а ніби і на чистому сі. Якщо у вас немає ніяких обмежень то цю задачу можна вирішити набагато простіше. В любому випадку вам буде корисно переглянути цей сайт http://www.cplusplus.com/reference/string/string/

Подякували: olena_sherstnyakova1

6

Re: Вказівники. Робота із рядками.

таки ви були праві, int k=strlen(word2);
але воно далі їсть слова, тобто деякі літери, на жаль(

7

Re: Вказівники. Робота із рядками.

olena_sherstnyakova написав:

таки ви були праві, int k=strlen(word2);
але воно далі їсть слова, тобто деякі літери, на жаль(

Спробуйте такий соус:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    const int sizeSrc = 80;
    char strSrc[sizeSrc+1]={0};
    cout<<"Your string: ";
    cin.getline(strSrc, sizeSrc, '\n');
    
    const int sizeWordSrc = 50;
    char wordSrc[sizeWordSrc+1]={0};
    cout<<"Your word to replace: ";
    cin.getline(wordSrc, sizeWordSrc, '\n');
    
    const int sizeWordDest = 50;
    char wordDest[sizeWordDest+1]={0};
    cout<<"Your word for replace: ";
    cin.getline(wordDest, sizeWordDest, '\n');
    
    /* Start replacing */
    
    string strResult = strSrc;
    strResult.replace((strstr(strSrc,wordSrc)-strSrc),strlen(wordSrc) , wordDest);
    
    cout<<"Your result: "<<strResult<<endl;
    
    return 0;
}
I belong to the Dead Generation.
Подякували: olena_sherstnyakova1

8

Re: Вказівники. Робота із рядками.

Ось робочий код без використання класу String

#include "stdafx.h"
#include<iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    char str[80];
    char word1[50];
    char word2[50];
    char result[130];
    char *p;
    cout << "Vvedit strichky: ";
    gets(str);
    cout << "vvedit' shykane slovo\n";
    gets(word1);
    cout << "vvedit' inshe slovo\n";
    gets(word2);    
    if((p = strstr(str, word1)) != NULL){
        char * start = str;
        int i = 0;
        while(start != p){
            result[i] = *start;
            start++;
            i++;
        }
        int k = strlen(word2);
        int j = 0;
        while(j < k){
            result[i] = word2[j];
            i++;
            j++;
        }
        start += strlen(word1);
        while(*start){
            result[i] = *start;
            start++;
            i++;
        }
        result[i] = '\0';
    }
    cout<<"Vasha strichka: ";
    cout<<result << "\n";
    for(;;){
    }
    return 0;
}
Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }
Подякували: olena_sherstnyakova1

9

Re: Вказівники. Робота із рядками.

чудовий)))спасибі))тілки без вказівників(
=)

10

Re: Вказівники. Робота із рядками.

вибачте, а в якому компіляторі ви це робите? в мене вибивають помилки..

11 Востаннє редагувалося Patron (10.12.2012 23:41:07)

Re: Вказівники. Робота із рядками.

я компілюю в Visual Studio 2010.

#include<iostream>
#include <stdio.h>

using namespace std;

int main(int argc, char * argv[])
{
    char str[80];
    char word1[50];
    char word2[50];
    char result[130];
    char *p;
    cout << "Vvedit strichky: ";
    gets(str);
    cout << "vvedit' shykane slovo\n";
    gets(word1);
    cout << "vvedit' inshe slovo\n";
    gets(word2);    
    if((p = strstr(str, word1)) != NULL){
        char * start = str;
        int i = 0;
        while(start != p){
            result[i] = *start;
            start++;
            i++;
        }
        int k = strlen(word2);
        int j = 0;
        while(j < k){
            result[i] = word2[j];
            i++;
            j++;
        }
        start += strlen(word1);
        while(*start){
            result[i] = *start;
            start++;
            i++;
        }
        result[i] = '\0';
    }
    cout<<"Vasha strichka: ";
    cout<<result << "\n";
    for(;;){
    }
    return 0;
}

Чому без вказівників? start i p - вказівники)

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }
Подякували: olena_sherstnyakova1

12

Re: Вказівники. Робота із рядками.

а, ні, в вас є вказівники, це я не вам відповіла)
ве-ле-чез-не спасибі вам)

13

Re: Вказівники. Робота із рядками.

Правильно говорити рядки, а не стрічки.
В українській мові є слово стрічки, але воно використовується в зовсім іншому контексті.
Це так, невелелике зауваження.

Подякували: Bartash1

14

Re: Вказівники. Робота із рядками.

Replace написав:

Правильно говорити рядки, а не стрічки.
В українській мові є слово стрічки, але воно використовується в зовсім іншому контексті.
Це так, невелелике зауваження.

Мені подобається слово "рядки" але як перекласти українською наприклад "string data" або "required type string"?

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

15

Re: Вказівники. Робота із рядками.

А в чому проблема?
1) рядкові дані або дані рядкового типу
2) необхідно рядковий тип

16 Востаннє редагувалося Patron (11.12.2012 09:35:12)

Re: Вказівники. Робота із рядками.

Пробема в тому що я ще й блогер то того всього і дуже часто незнав як написати такі словосполучення українською в українському реченні. Я маю на увазі що деякі речення англійською із технічними термінами з програмування дуже важко перекладати на українську. Наприклад:

The String class represents character strings.

- це що "Клас Рядок представляє символ рядки"?

Щоб зрозуміти рекурсію потрібно спочатку зрозуміти рекурсію.
int fac(int n) { return n < 2 ? 1 : n*fac(n-1); }

17

Re: Вказівники. Робота із рядками.

Patron написав:

Пробема в тому що я ще й блогер то того всього і дуже часто незнав як написати такі словосполучення українською в українському реченні. Я маю на увазі що деякі речення англійською із технічними термінами з програмування дуже важко перекладати на українську. Наприклад:

The String class represents character strings.

- це що "Клас Рядок представляє символ рядки"?

Власні назви перекладати не є добре. По-перше, будь-який переклад перекручує зміст. По-друге, переклад фактично є перейменуванням, а від цього тільки проблеми взаєморозумінь.

"Клас String представляє символьний рядок." Програмісту вистачить і мінімального базису англійської, щоби швидко засвоїти таке речення.

З іншого боку, поняття, процеси, дії, явища - для всіх них переклад був би доречним.

I belong to the Dead Generation.

18

Re: Вказівники. Робота із рядками.

Стрічка - це "лента" (tape).
Рядок - це "строка" (string).
Тому перше не можна використовувати в даному контексті..

19 Востаннє редагувалося bunyk (11.12.2012 14:42:52)

Re: Вказівники. Робота із рядками.

Раз вже тема з'їхала, то хто знає як перекласти "multirow string"? Багаторядковий рядок?

Подякували: Patron1

20

Re: Вказівники. Робота із рядками.

bunyk написав:

Раз вже тема з'їхала, то хто знає як перекласти "multirow string"? Багаторядковий рядок?

Як щодо таких: "мультирядок", "багаторядок", "багаторяд", "мультиряд"?

I belong to the Dead Generation.
Подякували: DOP1