#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,我不知道如何使用指针。我一直在收到错误,就像赋值从指针中生成整数而没有强制转换
答案 0 :(得分:1)
char *letter;
该语句声明了一个名为letter
的变量,与char ch;
之类的任何其他语句一样。
现在,有什么不同!!
差异(和相似性)是:
char ch;
声明一个char
变量,即分配(静态)大小为1字节的内存块,您可以使用ch
来引用它。
char *letter;
声明char pointer
,即内存大小为2或4或8字节(取决于编译器)将被分配(再次静态)以存储地址 char
变量。
现在,当您在*letter
循环中使用for
作为左值(左侧)时,这意味着您正在尝试写入存储在letter
中的内存地址。在您的情况下,您从未在letter
中存储任何地址,为此,您可以使用letter = &ch;
,其中ch
是char
变量。
这就是讲座!!
现在我建议您的计划:
您不需要使用letter
指针进行循环,一个简单的char i
变量就可以了。
要按计划重新构建字符串,只需使用原始字符串的字符作为索引即可形成新字符串。声明一个大长度的空字符串,然后在syllable[orig_string[i] - 'A']
循环内保持连接for
,直到orig_string
结束。假设orig_string
包含所有大写字母
最后,更正您的printf
语法。
从好消息来源阅读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.