小编sal*_*000的帖子

如果char*s是只读的,为什么我可以覆盖它们?

我的课程告诉我,char*s是静态的/只读的,所以我认为这意味着你在定义之后就无法编辑它们.但是当我跑步时:

char* fruit = "banana";
printf("fruit is %s\n", fruit);
fruit = "apple";
printf("fruit is %s\n", fruit);
Run Code Online (Sandbox Code Playgroud)

然后编译好并给我:

fruit is banana
fruit is apple
Run Code Online (Sandbox Code Playgroud)

为什么?我误解了只读是什么意思吗?很抱歉,如果这很明显,但我是新手编码,我无法在线找到答案.

c arrays string string-literals

14
推荐指数
3
解决办法
2735
查看次数

实际上是否可以在C上存储和处理单个UTF-8字符?如果是这样,怎么样?

我用C编写了一个程序,将单词分解成音节,段和字母.它适用于ASCII字符,但我想制作适用于IPA和阿拉伯语的版本.

我在保存和执行各个角色的功能方面遇到了大量问题.我的编辑器和控制台都设置为UTF-8,如果我将它保存为char*,可以显示阿拉伯语文本,但是当我尝试打印wchars时,它们会显示随机的标点符号.

我的程序需要能够识别单个UTF-8字符才能工作.例如,对于单词'though',它将't'存储为音节[1]段[1]字母[1],h存储为音节[1]段[1]字母[2]等.我希望能够对非ASCII字符执行相同操作.

我基本上花了一整天研究unicode并尝试不同的方法,我不能让他们中的任何一个让我将阿拉伯字符存储为角色.

如果我完全误解了整个概念,或者它实际上是不可能在C中做我想做的事情,我不确定我是否只是在一路上做了一些愚蠢的语法错误,我应该给予起来尝试另一种语言......

我会大量地,大规模地,大量地欣赏你能提供的任何帮助!我对编程很陌生,但是unicode对我的工作起到了重要的作用,所以我想从头开始研究如何做.

我对unicode如何工作的理解(如果我出错的话):

  1. 我在编辑器中输入了一些文字.我的编辑器根据我设置的编码对其进行编码.因此,如果我将其设置为UFT-8,它将使用2字节序列0xd8 0xab编码阿拉伯字母ب,表示代码点U + 0628.

  2. 我编译它,将0xd8 0xab分解为二进制11011000 10101000.

  3. 我在命令提示符下运行它.命令提示符根据我设置的编码解释文本,因此如果我将其设置为UFT-8,则应将11011000 10101000解释为代码点U + 0628.Unicode算法还告诉它向我显示哪个版本的U + 0628,因为角色具有不同的形状,具体取决于它在单词中的位置.由于角色是独自一人,它将显示独立版本ب

我对在C中处理unicode的方法的理解:

选项A - 使用编码为UTF-8的单字节(http://www.nubaria.com/en/blog/?p=289)

使用编码为UTF-8的单字节.将我的所有数据类型保留为chars和char数组,并仅在我的代码中键入ASCII字符.如果我必须硬编码unicode字符,请将其作为数组输入格式:

    const char kChineseSampleText[] = "\xe4\xb8\xad\xe6\x96\x87";
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 我需要操纵个别角色
  2. 必须输入阿拉伯字符作为代码点才能使我的代码完全无法读取并使我的速度极慢.

选项B - 使用wchar和朋友(http://icu-project.org/docs/papers/unicode_wchar_t.html)

使用字符交换为wchars,根据编译器,它包含2到4个字节.像strlen这样的字符串函数不起作用,因为它们期望字符是一个字节,但是我可以使用像wprintf这样的w函数.

我的问题是:

我根本无法打印阿拉伯字符!我可以让他们打印英文字母,但阿拉伯字符只是作为随机标点符号.

我已经尝试输入unicode代码点以及实际的阿拉伯字符,我已经尝试将它们打印到控制台和UTF-8编码的文本文件,我得到相同的结果,即使控制台和文本文件显示阿拉伯文本(如果作为char*输入).我最后把代码包括在内.

(值得一提的是,我知道很多人认为wchars是坏的,因为它们不是很便携,而且因为它们占用了ASCII字符的额外空间.但是在这个阶段,这些都不是真正的担心我 - 我只是编写程序在我自己的计算机上运行,​​程序只处理短字符串.)

选项C - 使用外部库

我已经阅读了各种评论,外部库是要走的路,所以我尝试过:

C编程库

http://www.cprogramming.com/tutorial/unicode.html建议用无符号长整数替换所有字符,并使用特殊函数迭代字符串等.该站点甚至提供了一个样本库供下载.

我的问题:

虽然我可以将字符设置为无符号长整数但我无法将其打印出来,因为printf和wprintf函数不起作用,并且网站上也没有提供库(我想这个库可能是为Linux设计的) ?某些数据类型无效,修改它们也不起作用)

ICU图书馆

我的问题:

我下载了ICU库,但是当我研究如何使用它时,我看到了诸如characterIterator之类的功能无法在C中使用(http://userguide.icu-project.org/strings).能够遍历字符对于我需要做的事情来说是完全基本的,所以我认为图书馆不适合我.

我的代码

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>
#include <string.h>


int main ()
{
wchar_t unicode = …
Run Code Online (Sandbox Code Playgroud)

c unicode wchar

11
推荐指数
1
解决办法
912
查看次数

如何在 SwiftUI ScrollView 中设置可编辑 UITextView 的宽度?

我正在构建一个 SwiftUI 应用程序,我想将一个可编辑的 UITextView (包装在 UIViewRepresentable 中)放入 SwiftUI ScrollView 中。原因是我有其他 SwiftUI 内容想要放在文本上方,并且我希望它与文本一起滚动。我需要一个 TextView,因为我想要富文本和工具栏。

我想我可以禁用 UITextView 上的滚动并赋予它无限的高度,但这也赋予它无限的宽度,因此文本会水平滚动屏幕边缘,直到添加换行符。我尝试将文本视图的内容大小和框架大小设置为屏幕宽度,如如何在 UITextView 中禁用垂直滚动?但我无法让它发挥作用。我可以成功更新 textview 内容大小,但更改似乎稍后会被覆盖(请参阅 textViewDidChange 中的打印语句)。

有什么方法可以实现这一点吗?即 SwiftUI ScrollView 内的可编辑 UITextView。提前致谢!


import SwiftUI


struct TextView: UIViewRepresentable {
    var attributedString: NSAttributedString
    var fixedWidth: CGFloat
    
    func makeCoordinator() -> Coordinator {
        return Coordinator(self)
    }
    
    
    class Coordinator: NSObject, UITextViewDelegate {
        var parent: TextView
        
        init(_ parent: TextView) {
            self.parent = parent
        }
        
        func textViewDidChange(_ textView: UITextView) {
            print("pre content size update: \(textView.contentSize)") // width is over limit …
Run Code Online (Sandbox Code Playgroud)

uiscrollview uitextview ios swift swiftui

7
推荐指数
1
解决办法
1649
查看次数

根据布局方向翻转 SwiftUI 形状

我制作了一个 SemiRoundedRectangle 形状,用于对侧面菜单进行 ClipShape。如果用户使用 RTL 语言,我需要翻转它,但不确定实现此目的的最佳方法。

\n

我已经尝试过.flipsForRightToLeftLayoutDirection(true),但这也会翻转实际的阿拉伯文本。当我尝试旋转形状时,它不再符合形状协议,因此我不能再在.clipShape. 当我切换到阿拉伯语时,SwiftUI 中的其他所有内容都会神奇地自行翻转,是否可以在我的形状中添加一些东西来赋予它这些魔力?

\n

感谢您的帮助 :)

\n
\nimport SwiftUI\n\nstruct SemiRoundedRectangle: Shape {\n    var cornerRadius: CGFloat\n    func path(in rect: CGRect) -> Path {\n        var path = Path()\n        path.move(to: CGPoint(x: rect.maxX, y: rect.minY))\n        path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))\n        path.addLine(to: CGPoint(x: rect.minX+cornerRadius, y: rect.maxY))\n        path.addArc(center: CGPoint(x: cornerRadius, y: rect.height - cornerRadius),\n                    radius: cornerRadius,\n                    startAngle: .degrees(90),\n                    endAngle: .degrees(180), clockwise: false)\n        path.addLine(to: CGPoint(x: 0, y: cornerRadius))\n        path.addArc(center: CGPoint(x: cornerRadius, y: cornerRadius),\n                    radius: cornerRadius,\n                    startAngle: …
Run Code Online (Sandbox Code Playgroud)

localization ios swift swiftui

6
推荐指数
1
解决办法
1081
查看次数

!操作员在做循环时

我只是在C中进行插入排序的教程,我很难理解它的方式!运算符用作do while循环的条件.

条件只是while (!done)但我不明白它是如何知道什么不应该等于变量完成.喜欢的东西while (done==0)会让我更有意义.

我只是开始编码,如果答案非常明显,那就很抱歉!我试过谷歌搜索但我发现很难表达问题...

代码如下:

void insertionSortArray (int arr[])
{
    for(int i = 1; i < SIZE; i++)
    {
        int value = arr[i];
        int j = i -1;
        int done = 0;
        do
        {
            if (arr[j]>value)
            {
                arr [j+1] = arr[j];
                j - -;
                if (j<0)
                done = 1;
            }

            else
                done = 1;

        } while (!done);

        arr [j+1] = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!!

c insertion-sort do-while

2
推荐指数
1
解决办法
94
查看次数