关于指针和数组

时间:2013-10-14 03:41:19

标签: c++ c pointers

#include<stdio.h>
#include<stdlib.h>

char *syllable[26] = {"a","bub","cash","dud","e","fud","gug","hash","i","jay",
    "kuck","lul","mum","nun","o","pub","quack","rug","sus",
    "tut","u","vuv","wack","xux","yuck","zug"};

void Tutnese(char *word, char *newword);
char *letter;


void Tutnese(char *word, char *newword)
{

    //clrscr();
    for(*letter = 'A'; *letter <= 'Z'; *letter++)
    {
        letter=syllable;
        printf("%c\n",&letter);
    }
}

Tutnese是一款英语游戏,主要供那些用它来交谈的儿童使用 (感知)成人的隐私(反之亦然)

我想让A =“A”B =“bub”c =“cash”等等。 我期待这样的结果。

“计算机。”成为“cashomumpubututerug”。 - “Stony”成为“Sustutonunyuck”

但我刚开始学习c,我不知道如何使用指针。我一直在收到错误,就像赋值从指针中生成整数而没有强制转换

3 个答案:

答案 0 :(得分:1)

char *letter;
该语句声明了一个名为letter的变量,与char ch;之类的任何其他语句一样。

现在,有什么不同!!

差异(和相似性)是:

  1. char ch;声明一个char变量,即分配(静态)大小为1字节的内存块,您可以使用ch来引用它。

  2. 另一方面,
  3. char *letter;声明char pointer,即内存大小为2或4或8字节(取决于编译器)将被分配(再次静态)以存储地址 char变量

  4. 现在,当您在*letter循环中使用for作为左值(左侧)时,这意味着您正在尝试写入存储在letter中的内存地址。在您的情况下,您从未在letter中存储任何地址,为此,您可以使用letter = &ch;,其中chchar变量。

    这就是讲座!!

    现在我建议您的计划:

    1. 您不需要使用letter指针进行循环,一个简单的char i变量就可以了。

    2. 要按计划重新构建字符串,只需使用原始字符串的字符作为索引即可形成新字符串。声明一个大长度的空字符串,然后在syllable[orig_string[i] - 'A']循环内保持连接for,直到orig_string结束。假设orig_string包含所有大写字母

    3. 最后,更正您的printf语法。

    4. 从好消息来源阅读C 中的指针,因为它们永远不会离开你,并会给你各种噩梦。

答案 1 :(得分:0)

让我们忘记指针并解决问题。 您有一个单词word,并且您希望根据您的映射创建newword

首先,你需要弄清楚newword有多大。 为此,迭代word中的字符并添加映射的字符串长度(称之为N) 完成后,您知道可以为newword(通过malloc)分配N + 1个字节(字符串在C中为空终止)。 然后,再次遍历字符,然后附加到newword

让我给你一些提示: 要遍历字符串(让我们称之为word),C代码看起来像:

unsigned int wordlen = strlen(word);
for(unsigned int index = 0; index < wordlen; index++)
    printf("Character at %u is %c", index, word[index]);

你的for循环非常混乱。在C中查找关于指针和字符串操作的一些教程。

答案 2 :(得分:0)

代码

#include <ctype.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *syllable[26] = {"a","bub","cash","dud","e","fud","gug","hash","i","jay",
    "kuck","lul","mum","nun","o","pub","quack","rug","sus",
    "tut","u","vuv","wack","xux","yuck","zug"};

void Tutnese(char *word, char *newword, size_t new_size);

void Tutnese(char *word, char *newword, size_t new_size)
{
    char *end = newword + new_size;
    char c;
    while ((c = *word++) != '\0')
    {
        if (!isalpha(c))
            *newword++ = c;
        else
        {
            char *tut = syllable[tolower(c) - 'a'];
            ptrdiff_t len = strlen(tut);
            if (end - newword <= len)
                break;
            memcpy(newword, tut, len + 1);
            newword += len;
        }
    }
    *newword = '\0';
}

int main(void)
{
    char i_data[1024];
    char o_data[4096];

    while (fgets(i_data, sizeof(i_data), stdin) != 0)
    {
        Tutnese(i_data, o_data, sizeof(o_data));
        printf("I: %sO: %s", i_data, o_data);
    }
    return(0);
}

输出

I: computer
O: cashomumpubututerug
I: how do you tell mum that she cannot understand us?
O: hashowack dudo yuckou tutelullul mumumum tuthashatut sushashe cashanunnunotut ununduderugsustutanundud usus?
I: The quick brown fox jumped over the lazy dog.
O: tuthashe quackuicashkuck bubrugowacknun fudoxux jayumumpubedud ovuverug tuthashe lulazugyuck dudogug.